2012-03-09 38 views

回答

5

對於Ember觀察者的工作原理的基本誤解是一個常見的錯誤。在你的榜樣,你有你的觀點test如下:

... 

style : Ember.Object.create({ 
    a:4, 
    b:2 
}), 
setStyle : function(key, val){ 
    var style = this.get('style'); 
    style[key] = val; 
    this.set('style', style);   
}, 

... 

test.style屬性指向一個Ember.Objecttest.setStyle()正在改變對Ember.Object特定屬性的值。一個常見的錯誤是認爲重置一個屬性到同一個對象將調用它的任何觀察者,就像你對這條線做的那樣:this.set('style', style)。那麼這不是Ember觀察員的工作方式。 Ember中的觀察者會在屬性的實際值發生變化時自動觸發。將style屬性設置爲自身不會更改對象style指向的對象,因此它不會更改該屬性的值(實際上,該代碼根本不會執行任何操作)。在這種情況下,您看起來像需要手動告訴Ember style屬性已更改。您可以致電notifyPropertyChange()

請看下面的修改後的代碼爲setStyle

setStyle : function(key, val){ 
    var style = this.get('style'); 
    style.set(key, val); // You should always use `.get()` and `.set()` 

    this.notifyPropertyChange('style'); 
} 

這將導致你的觀察員開火。

相關問題