我需要知道(在JS中)我的模型(使用knockout.js)或者更确切地说是一个属性发生了变化。
我该怎么做?
这里有一些代码:
function DrawingToolViewModel() {
var self = this;
self.drawMode = ko.observable('Line');
}
model = new DrawingToolViewModel();
ko.applyBindings(model);
现在,无论发生什么变化,模型都会更新为drawMode指定的HTML元素。那没关系,但如果模型中的某些内容发生了变化,我怎么能在JS中做出反应?
修改
我的问题不够清楚,抱歉。我知道observables但我想订阅所有属性,而不是为每个属性都这样做。更像是“如果模型中的某些内容发生了变化,请通知我”
答案 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
这可以有效地跟踪视图模型的任何更改,因此您应该能够根据需要进行调整。