2012-03-09 6 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が指しているオブジェクトは変更されないため、プロパティの値は変更されません(実際には何も行われません)。この場合、styleプロパティが変更されたことをEmberに手動で伝える必要があるようです。 notifyPropertyChange()を呼び出すことでそれを行うことができます。これはあなたの観察者が発射するようになります

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

    this.notifyPropertyChange('style'); 
} 

setStyleに対して次の変更されたコードで

ルック。

関連する問題