订阅淘汰赛中的完整模型

时间:2014-12-01 11:33:00

标签: javascript jquery knockout.js subscription subscribe

我有一个包含很多属性的视图模型,我想检测任何更改,以便将模型存储到我的数据库中。

我不想订阅每一个属性,而是一次性订阅所有属性

我使用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());
    })

}

我的问题是否有任何已知的解决方案?

1 个答案:

答案 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