Я экспериментирую с нокаутом и плагином отображения и задаюсь вопросом, почему это не работает. У меня есть ViewModel, что я хочу, чтобы загрузить с помощью расширения отображениясопоставление нокаутов, вызывающих stackoverflow
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
}
]
}
Первый вызов сопоставления завершается успешно, но второй вызов завершился неудачно с потоком stackoverflow: («Невозможно RangeError: максимальный размер стека вызовов превышен» в Chrome)
Если я изменю код, чтобы не передавать параметры для отображения, исключение не выбрасывается.
Я также попытался упростить конструктор ToDo к этому
var TodoItem = function (options) {
var todoItem = {};
return todoItem;
};
, но я все еще получаю ту же ошибку.
Похоже, я не могу этого сделать, но мне было интересно, почему?
Не уверен, что кто голосовал это вниз, но это не похоже на работу, я удалил TodoItem.options вообще и заменить К.О. .mapping.fromJSON (данные, {todos: TodoItem.options}, self); с ko.mapping.fromJSON (данные, {todos: {create: TodoItem}}, self); и код работает. благодаря –