2013-09-05 13 views
6

レンダリング中のプロパティを変更すると、テンプレートが更新されないのはなぜですか? documentationには{{each}}がバインディング対応であると書かれていますが、私が気付いていないことは明らかです。Ember、プロパティの変更時にテンプレートが更新されない

ハンドルバーのすべての機能と同様に、{{#each}}ヘルパーはバインディング対応です。 アプリケーションが新しい項目を配列に追加する、または項目を削除する場合、 DOMはコードを記述する必要なく更新されます。

ここでは私のコントローラは、私は次のコードを持っている私のテンプレートで

App.MaintemplateController = Ember.Controller.extend({ 
    alist: ['foo', "bar"],   
    actions : { 
    addel: function(){ 
      this.alist.push('xpto'); 
      console.log(this.alist); 
    } 
    } 
}); 

です。

データが正しくレンダリングされます。ボタンをクリックすると、要素がプロパティに追加されますが、テンプレートは更新されません。どうして?データと同期させるにはどうすればよいですか?

答えて

15

平等なバニラのjavascript .pushを使用しているためテンプレートが更新されていませんby emberはそれぞれ.pushObject.removeObjectを提供しています。デフォルトでEmberは配列プロトタイプを拡張して、バインディング認識環境でうまく動作するようにします。だからあなたのテンプレートは、あなたが何をすべき更新作る

:ここ

App.MaintemplateController = Ember.Controller.extend({ 
    alist: ['foo', "bar"],   
    actions : { 
    addel: function(){ 
     this.get('alist').pushObject('xpto'); 
     console.log(this.get('alist')); 
    } 
    } 
}); 

重要な行は、そうでない場合は結合メカニズムが認識されませんまた、あなたが常に燃えさしのオブジェクトにアクセスするために.get().set()を使用する必要がありますthis.get('alist').pushObject('xpto'); ですオブジェクトに加えられた変更。

希望します。

+0

これは私の質問に答え、この問題を解決します。しかし、データ型に関係なく機能するソリューションがあることを期待していました。 単純な配列の代わりに複雑なオブジェクトがあり、内部プロパティの一部を更新するためにassignementを使用する必要がある場合はどうすればよいですか? – Pico

+1

@Pico、私は助けることができてうれしい。もっと複雑なオブジェクトの場合は、オブジェクトツリーを歩いてプロパティを設定します: 'this.get( 'complexObject.childOne.childTwo')。set( 'name'、 'foo'); – intuitivepixel

+0

はい、ありがとうございます。 – Pico

関連する問題