Javascript knockout.js中的Eventhandler模型更改

Javascript knockout.js中的Eventhandler模型更改,javascript,knockout.js,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中)我的模型(使用knockout.JS)或者一个属性什么时候发生了变化

我该怎么做

下面是一些代码:

function DrawingToolViewModel() {
    var self = this;
    self.drawMode = ko.observable('Line');
}
model = new DrawingToolViewModel();
ko.applyBindings(model);
现在,分配给drawMode的HTML元素将由模型更新并返回,无论发生什么更改。这很好,但是如果模型中的某些内容发生了变化,我如何在JS中做出反应呢

编辑


对不起,我的问题不够清楚。我知道可观测的,但我想订阅所有属性,而不是订阅每个属性。更像是“如果模型中的某些内容发生了更改,请通知我”

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

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

总结以下评论


要获得ViewModel中每一项更改的通知,请在NuGet上查看文章和的changeTracker

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

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


但是,如果您希望在视图模型上发生任何属性更改时得到通知,那么我将在这篇文章中创建一个“脏标志”:


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

对不起,我的问题不够清楚。我知道可观测的,但我想订阅所有属性,而不是订阅每个属性。更像是“如果模型中的某些东西发生了变化,请通知我”。我会看看这篇文章,然后在你的淘汰赛中添加一个脏旗。这可以有效地跟踪视图模型的任何更改,因此您应该能够根据需要对其进行调整。我已经相应地更新了我的答案。订阅可能是您所需要的全部,如果它只是一次性订阅的话。否则,您更需要一个变更跟踪器。Ryan的帖子很好。另外,我在NuGet上创建了一个changeTracker,您可以查看。我将结合Ryan的贡献更新更多功能。。。很快:)我还编写了变更跟踪程序,这和Ryan和John所做的没什么两样,这似乎确实是一条路要走。我的版本接受一个对象,该对象指定跟踪更改的属性(默认值为all),并与我编写的另一个向数组添加总计的位密切相关(包括一个通知,总计中的任何金额都已更改,而不仅仅是总计已更改)。您需要知道更改了哪些属性吗?你需要它来深入地应用到对象上,还是仅仅应用到属性的第一层?属性不重要,只是第一层,没有深入。