我是knockout.js的新手,事实上两天前我开始意识到我的UI脚本已经失控了。
所以,我有几个视图模型,都是使用映射功能填充的。
我从通过我的MVC控制器提供的JSON中填充了OK模型。
function ChangeViewModel(data) {
var self = this;
changeMapping = {
'CORs': {
create: function (options) {
return new CORViewModel(options.data);
}
}
}
return ko.mapping.fromJS(data, changeMapping, self);
}
function CORViewModel(data) {
var self = this;
corMapping = {
'copy': ['VendorID', 'VendorName', 'ContractID'],
'include': ['CorNo', 'CorName', 'Items'],
'Items': {
create: function (options) {
return new CORItemViewModel(options.data);
}
}
}
self.CorNoName = ko.pureComputed(function () {
if (self.CorVersion() > 1) return self.CorNo() + ":" + self.CorVersion();
return self.CorNo();
});
self.GrandTotal = ko.pureComputed(function () {
var total = 0;
$.each(self.Items(), function () { total += this.Total() })
return total;
});
return ko.mapping.fromJS(data, corMapping, self);
}
function CORItemViewModel(data) {
var self = this;
corItemMapping = {
'copy': ['ChangeItemId', 'VendorCorId', 'VendorName', 'VendorId'],
}
return ko.mapping.fromJS(data, corItemMapping, self);
}
这就是我的视图模型,这就是我在$(文档).ready函数中加载vm的方法
var vm = new ChangeViewModel(data);
ko.applyBindings(vm);
我把所有这些显示在一个带有输入等的表格中,并且看起来都很棒。 但是如果我在CORItemViewModel中更改Total,则父CORViewModel中的GrandTotal不会更新。谁能告诉我我可能缺少什么?
答案 0 :(得分:0)
我创造了一个小提琴,以超级冷却的建议,它工作得很好......
https://jsfiddle.net/afvh6d6t/14/
code..
所以我回到了原来,原来是一个有绑定手柄的问题我用ko-money打破了更新,所以我用了这个bindingHandler ..
http://djsharepoint.com/post/2015/01/28/useful-knockout-js-binding-handlers
对问题进行了排序。
感谢所有花时间发帖的人。