我正在试验淘汰赛和映射插件,想知道为什么这不起作用。我有一个要使用映射扩展加载的视图模型
function todoListViewModel(data) {
ko.mapping.fromJSON(data, { todos: TodoItem.options }, self);
ko.mapping.fromJSON(data, { todos: TodoItem.options }, self);
}
映射有一个看起来像这样的选项:
var TodoItem = function (options) {
var todoItem = ko.mapping.fromJS(options.data);
todoItem.remove = function () {
alert('remove');
};
return todoItem;
};
TodoItem.options = {
create: TodoItem
};
JSON 数据如下所示:
{
"id": "0",
"todo": "",
"todos": [
{
"todo": "Kevin",
"isDone": true
}
]
}
对映射的第一次调用成功,但第二次调用失败并出现堆栈溢出:(Chrome 中的“未捕获 RangeError:超出最大调用堆栈大小”)
如果我更改代码以便不将选项传递给映射,则不会引发异常。
我也尝试过将 ToDo 构造函数简化为此
var TodoItem = function (options) {
var todoItem = {};
return todoItem;
};
但我仍然得到同样的错误。
看起来我不能这样做,但我想知道为什么?