2014-12-01 4 views
0

У меня есть модель с большим количеством атрибутов, и я хочу обнаружить любые изменения, чтобы сохранить модель в моей базе данных.Подпишитесь, чтобы закончить модель в нокаут js

Я не хочу подписаться на каждый атрибут, но и ко всем сразу

Мой подход с 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

Вы можете объяснить свой вопрос? –

+0

'var self = this' объявлен, и я удивлен, почему вы ссылаетесь на' this.', а используете 'self.' –

+0

все пробовал, это была только последняя версия, прежде чем сдаваться –

ответ

3

Обратный вызов для $.each получит имя свойства как 1-й аргумент и значение свойства как второе. Таким образом, в вашем случае 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.

+0

спасибо, это сработало для меня;) –