【发布时间】:2015-10-13 03:53:05
【问题描述】:
我对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);
}
这就是我的视图模型,这就是我在 $(document).ready 函数中加载虚拟机的方式
var vm = new ChangeViewModel(data);
ko.applyBindings(vm);
我将所有这些都显示在一个带有输入等的表格中,并且看起来都很棒。 但是,如果我更改 CORItemViewModel 中的 Total,则父 CORViewModel 中的 GrandTotal 不会更新。谁能告诉我我可能缺少什么?
【问题讨论】:
-
添加一个完整的代码,方便查看发生了什么。
-
您确定必须应用绑定 ChangeViewModel 吗?
-
你的计算被添加到
self,但是你的构造函数returns是mapping.fromJS的输出,不包括self。您甚至可以访问这些计算结果吗? -
感谢 Roy,抱歉,复制/粘贴/编辑错误,再次将 self 添加到构造函数中
-
Oiyl,ChangeViewModel 实际上还有其他绑定,它们工作正常,我只是删除它们以简化
标签: javascript jquery asp.net-mvc knockout.js