如何添加到现有的Knockout JS映射对象?

时间:2012-11-22 00:02:47

标签: knockout.js knockout-mapping-plugin

我有一个来自api的JSON数据,如下所示:

var dataTotalInit = { dataTotal: [{ Cost: 0, Quantity: 0, Security: "" }] };
var mappingResult = ko.mapping.fromJS(dataTotalInit, {}, self);

稍后当我从buttonClick获取数据时,我想添加到我的JSON。

ko.utils.arrayForEach(self.AnotherObject(),function(item) {
     self.dataTotal.push({Cost:item.Cost(),Quantity:item.Quantity(),Security:item.Security()});
});

当我逐步执行代码时,它会将值添加到dataTotal,但数据不可观察,因此我的视图不会更新。请帮助谢谢

2 个答案:

答案 0 :(得分:1)

应该是

var dataTotalInit = ko.observableArray();

没有必要预先填充数组,但您可以这样做:

var dataTotalInit = ko.observableArray([[{ Cost: 0, Quantity: 0, Security: "" }]);

然后,正如您在示例中所示,将项目推送到observableArray:

ko.utils.arrayForEach(self.AnotherObject(),function(item) {
     self.dataTotal.push({Cost:item.Cost(),Quantity:item.Quantity(),Security:item.Security()});
});

更多信息:
http://knockoutjs.com/documentation/observableArrays.html

答案 1 :(得分:1)

您还需要观察新对象的所有属性:

ko.utils.arrayForEach(self.AnotherObject(),function(item) {
    self.dataTotal.push(ko.mapping.fromJS({Cost:item.Cost(),Quantity:item.Quantity(),Security:item.Security()}));
});