私はノックアウトとマッピングプラグインを試していますが、なぜこれが機能しないのか疑問に思っています。マッピング拡張機能を使用してロードしたいビューモデルがあります
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
}
]
}
マッピングへの最初の呼び出しは成功しますが、2番目の呼び出しはstackoverflowで失敗します:( Chromeでは「UncaughtRangeError:Maximum call stacksizeexceeded」)
マッピングにオプションを渡さないようにコードを変更すると、例外はスローされません。
ToDoコンストラクターをこれに単純化してみました
var TodoItem = function (options) {
var todoItem = {};
return todoItem;
};
しかし、それでも同じエラーが発生します。
これができないようですが、なぜだろうと思っていました。