具有可观察子类的Knockout

时间:2012-11-16 14:56:51

标签: knockout.js

我有一个包含子类的ViewModel,我希望在修改子类中的某个属性时收到通知,如下所示:

var Person = function(){
  this.name = ko.observable("john doe");
  this.age = ko.observable(45);
};

var ViewModel = function() {
  this.Owner = ko.observable(new Person());

  this.Owner().subscribe(function(){
     alert("Someone updated owner");
  });    
};

var vm = new ViewModel();
vm.Owner().age(34);
​

但上面的代码不起作用......

1 个答案:

答案 0 :(得分:2)

你可以试试这个:

var ViewModel = function() {
    var self = this;
    self.Owner = ko.observable(new Person());

    self.test = ko.computed(function(){
        ko.toJS(self.Owner);
    });

    self.test.subscribe(function() {
        alert("Someone updated owner");
    });
};

这是工作小提琴:http://jsfiddle.net/vyshniakov/hpKZj/

如果您想要实现类似isDirty标志的内容,请阅读以下文章:http://www.knockmeout.net/2011/05/creating-smart-dirty-flag-in-knockoutjs.html