ViewModel を初めて適用するとすべて正常に動作しますが、計算フィールドの作成後にマッピングを再適用すると、それらは削除されます。キーを変更しなければ、このコードは明らかに機能します
http://jsbin.com/ojabaf/14/edit
var modelJs = {test:{
list: [{name: 'a', val: 5, list: [ {name:'b', val: 11}, {name: 'c', val: 13} ]}]}
};
var mapping = {
'list': {
key: function(data) { return ko.utils.unwrapObservable(data.name); }
},
'name': {
key: function(data) { return ko.utils.unwrapObservable(data.name); }
}
};
var model = ko.mapping.fromJS(modelJs, mapping);
ko.utils.arrayForEach(model.test.list(), function(item) {
item.comp = ko.computed({read: function() { return this.val() * 2; } , owner: item });
ko.utils.arrayForEach(item.list(), function(item2) {
item2.comp = ko.computed({read: function() { return this.val() * 3; } , owner: item2 });
});
});
ko.applyBindings(model);
$('button').click(function () {
var modelJs = {test: {val: 3, list: [{name: 'b', val: 7, list: [ {name:'s', val: 15}, {name: 'c', val: 17} , {name: 'd', val: 17}, {name: 'f', val: 17}]}]}};
ko.mapping.fromJS(modelJs, model);
});
ページを更新せずに、ko.mapping を使用してこれらの計算フィールドを再計算する方法はありますか?
テンプレートも試してみました... http://jsbin.com/ojabaf/15/edit