如何观察所有对象属性的变化?

Jai*_*ime 6 foreach properties object ember.js

对于数组,我知道你可以这样做:

function() {
}.observes("array.@each")
Run Code Online (Sandbox Code Playgroud)

我所做的是将对象转换为数组并使用@each观察属性,但有没有更好的方法来观察对象的所有属性更改而不将其转换为数组?

cho*_*per 3

您可以观察isDirty自上次保存以来是否修改了任何对象的值(如果您使用的是 Ember 数据)。

或者,您可以将逗号分隔的属性列表传递给observes. 如果您的对象有很多属性,这可能会很长,但会起作用。

第三种方法可能是覆盖setUnknownProperty()并设置一个属性,一个“脏标志”(或执行您可能想要在那里执行的任何操作。

还有一个旧的 SO 帖子给出了以下答案:

App.WatchedObject = Ember.Object.extend({
  firstProp: null,
  secondProp: "bar",

  init: function(){
    this._super();
    var self = this;
    Ember.keys(this).forEach(function(key){
      if(Ember.typeOf(self.get(key)) !== 'function'){
        self.addObserver(key, function(){
          console.log(self.get(key));
        });
      }
    }); 
  }
});
Run Code Online (Sandbox Code Playgroud)

您可能可以将其拆分为 Mixin 以保持代码干燥。