對於數組我知道你可以做這樣的事情:如何觀察所有對象屬性更改?
function() {
}.observes("[email protected]")
我所做的就是將對象轉換成一個數組,並觀察了@each屬性,但有沒有更好的辦法來觀察對象的所有屬性無需將其轉換爲數組?
對於數組我知道你可以做這樣的事情:如何觀察所有對象屬性更改?
function() {
}.observes("[email protected]")
我所做的就是將對象轉換成一個數組,並觀察了@each屬性,但有沒有更好的辦法來觀察對象的所有屬性無需將其轉換爲數組?
您可以觀察isDirty
以查看自從上次保存以來是否有任何對象的值已被修改(如果您正在使用Ember數據)。
或者,您可以將逗號分隔的屬性列表傳遞給observes
。如果你的對象有很多屬性,這可能會很長,但是會起作用。
第三種方法可以覆蓋setUnknownProperty()
和設置屬性,一個「髒標誌」(或執行可能要在沒有任何行動
還有一個old SO post給出以下答案:
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));
});
}
});
}
});
你也許可以拆分此伸到一個mixin保持代碼DRY。
也許你可以創造一些像blabbermouth
混入並覆蓋set
方法獲取通知財產變化:
App.BlabbermouthMixin = Ember.Mixin.create({
set: function(keyName, value) {
this.set('updatedProperty', keyName);
this._super(keyName, value);
}
});
並觀察updatedProperty
屬性?
以上,這將不會標記對同一財產的後續修改,直到該過程中另一個財產被更改。另外,你確定所有的財產更改都通過'set'進行嗎?如果我們使用'object.setProperties'改變對象的屬性呢?該方法是否在內部使用'set'? – Ernesto
您可以在對象中獲取屬性的列表並將其應用到一個新的屬性:
attrs = Ember.keys(observedObject);
var c = Ember.computed(function() {
// Do stuff when something changes
})
Ember.defineProperty(target, propertyName, c.property.apply(c, attrs));
這裏是一個工作jsbin。應該使用類似的方法創建一個觀察者而不是一個屬性。
函數(){} .observes(「array。@ each」)實際上工作嗎?根據這裏的答案,沒有辦法觀察數組中的任何屬性:http://stackoverflow.com/a/24893070/188740 –
它實際上已經有一段時間了,因爲我已經使用了這種觀察者,但我確實記得它工作正常。它的行爲必須與數組相同。[] from kingpin2k的回答 – Jaime