knockout.js中的事件处理程序模型更改

时间:2012-04-03 14:14:03

标签: javascript knockout.js

我需要知道(在JS中)我的模型(使用knockout.js)或者更确切地说是一个属性发生了变化。

我该怎么做?

这里有一些代码:

function DrawingToolViewModel() {
    var self = this;
    self.drawMode = ko.observable('Line');
}
model = new DrawingToolViewModel();
ko.applyBindings(model);

现在,无论发生什么变化,模型都会更新为drawMode指定的HTML元素。那没关系,但如果模型中的某些内容发生了变化,我怎么能在JS中做出反应?

修改

我的问题不够清楚,抱歉。我知道observables但我想订阅所有属性,而不是为每个属性都这样做。更像是“如果模型中的某些内容发生了变化,请通知我”

2 个答案:

答案 0 :(得分:4)

如果您想注册自己的订阅以获得对可观察对象的更改的通知,您可以调用他们的订阅功能,例如:

myViewModel.personName.subscribe(function(newValue) {
    alert("The person's new name is " + newValue);
});

更多详情@ knockoutjs.com

总结以下评论

要了解ViewModel中的每次更改,请在NuGet上查看Ryan Niemeyer文章和John papa的changeTracker

答案 1 :(得分:0)

如果您希望在特定属性发生更改时收到通知,则有多种方法可以执行您想要的操作。一种方法是使用subscribe函数:

model.drawMode.subscribe(function(newValue) {    
   // your js goes in here
});

修改

但是,如果您希望在视图模型上 ANY 属性发生更改时收到通知,那么我会查看此帖子以创建“脏标志”:

http://www.knockmeout.net/2011/05/creating-smart-dirty-flag-in-knockoutjs.html

这可以有效地跟踪视图模型的任何更改,因此您应该能够根据需要进行调整。