我有一个带有两个虚拟机的主viewModel,它是通过映射插件创建的。
viewModelObj = {
first : new firstVM(),
second : new secondVM()
}
viewModel = mapping.fromJS(viewModelObj, mappingOptions);
ko.applyBindings(viewModel);
数据如下所示:
'firstObj' : {
'title' : 'CURRENT title goes here',
'children' : [
{ 'id': '00001', 'name': 'Rube no 1' },
{ 'id': '00002', 'name': 'Rube no 2' },
{ 'id': '00003', 'name': 'Rube no 3' }
],
'warning' : false
},
'secondObj' : {
'title' : 'Second Item title'
}
firstVM有observableArray孩子
self.children = ko.observableArray(item.children);
self.calLength = ko.computed(function() {
return 'Total ' + self.children().length;
});
在更新数据之前,一切似乎都能正常工作。更新数据:
'firstObj' : {
'title' : 'UPDATED TITLE goes here',
'children' : [
{ 'id': '00004', 'name': 'Rube no 4' },
{ 'id': '00005', 'name': 'Rube no 5' },
{ 'id': '00006', 'name': 'Rube no 6' },
{ 'id': '00007', 'name': 'Rube no 7' },
{ 'id': '00008', 'name': 'Rube no 8' },
{ 'id': '00009', 'name': 'Rube no 9' }
],
'warning' : true
},
'secondObj' : {
'title' : '2nd Title UPDATED'
}
在html中,first.children()。length返回更新数组的正确长度,foreach.children也可以正常工作,但VM中的 calLength()函数不会返回更新的长度。 WHY吗
看起来所有数据都已成功更新,但如果它是一个数组(我可以轻松获取self.title()或其他可观察数据),则无法在VM函数中访问。也许mapOptions存在一些问题?
'first' : {
create : function(options) {
return mapping.fromJS(options.data, {}, this);
}
},
'second' : {
create : function(options) {
return mapping.fromJS(options.data, {}, this);
}
}
这是一个完整的演示:
http://jsfiddle.net/simoncereska/bfvgT/
P.S。如果您有任何其他意见,欢迎您发布:)
非常感谢你。
答案 0 :(得分:1)
确保使用新值更新子级可观察数组,而不是用新的可观察数组替换。