我有一个包含很多属性的视图模型,我想检测任何更改,以便将模型存储到我的数据库中。
我不想订阅每一个属性,而是一次性订阅所有属性
我使用jQuery的方法根本不起作用
var MyModel = function(){
var self = this;
this.myMember1 = ko.observable(1);
this.myMember2 = ko.observable(1);
this.myMember3 = ko.observable(1);
.....
$.each(this, function (member, value) {
member.subscribe(saveModel());
})
}
我的问题是否有任何已知的解决方案?
答案 0 :(得分:3)
$.each
的回调将接收属性名称作为第一个参数,属性值作为第二个参数。因此,在您的情况下,member
是属性名称,value
是可观察值。订阅也需要一个函数,你给它的是函数调用的结果。
所以你需要:
$.each(this, function (member, value) {
if(ko.isObservable(self[member])) {
self[member].subscribe(saveModel); // saveModel not saveModel()
}
});
或
$.each(this, function (member, value) {
if(ko.isObservable(value)) {
value.subscribe(saveModel); // saveModel not saveModel()
}
});
如果saveModel
也是MyModel
的成员,则应将其引用为self.saveModel
。