最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Eventhandler model change in knockout.js - Stack Overflow

programmeradmin1浏览0评论

I need to know (in JS) when my model (using knockout.js) or rather a propery has changed.

How do I do that?

Here some code:

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

Now the assigned HTML element to drawMode will be updated by the model and back, whatever changes. That's fine, but how can I react in JS if something in the model has changed?

EDIT

My question wasn't clear enough, sorry. I know observables but I want to subscribe to ALL properties without doing that for every single property. More like "notify me if something in the model has changed"

I need to know (in JS) when my model (using knockout.js) or rather a propery has changed.

How do I do that?

Here some code:

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

Now the assigned HTML element to drawMode will be updated by the model and back, whatever changes. That's fine, but how can I react in JS if something in the model has changed?

EDIT

My question wasn't clear enough, sorry. I know observables but I want to subscribe to ALL properties without doing that for every single property. More like "notify me if something in the model has changed"

Share Improve this question edited Apr 3, 2012 at 14:51 Marc asked Apr 3, 2012 at 14:14 MarcMarc 6,7719 gold badges51 silver badges79 bronze badges 2
  • Do you need to know what property was changed? And do you need that to apply to the object deeply, or just the first layer of properties? – Peter T. LaComb Jr. Commented Apr 3, 2012 at 14:53
  • The property doesn't mater and just the first layer, nothing deeply. – Marc Commented Apr 3, 2012 at 15:35
Add a ment  | 

2 Answers 2

Reset to default 4

If you want to register your own subscriptions to be notified of changes to observables, you can call their subscribe function, for example:

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

More details @ knockoutjs.

Summarizing the ments below

To get notified on every change in the ViewModel, check Ryan Niemeyer article and John papa's changeTracker on NuGet

If you want to be notified when a specific property changes then there are several ways of doing what you want. One way is to use the subscribe function:

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

EDIT

However, if you want to be notified when ANY property changes on your view model then I would take a look at this post for creating a 'dirty flag':

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

This effectively tracks any changes to your view model so you should be able to adapt it to your needs.

发布评论

评论列表(0)

  1. 暂无评论