2012-01-30 1 views
35

Emberオブジェクトに配列を含めることができ、ハンドルバーを使用して内容を表示できます。しかし、私はset()を使って配列の内容を置き換えることができます。 push/pop/etcを使用して配列の内容を変更するにはどうすればよいですか?それでもUIバインディングの更新はありますか?コレクションでの作業についてEmber.jsで配列をプッシュ/ポップする方法は?

// JS 
App.obj = Ember.Object.create({ 
    "things": ["1", "2"], 
}); 
App.obj.set("things", ["1", "2", "3"]); // Works 
App.obj.things.push("3"); // Doesn't Work 

// HTML + Handlebars 
{{#with App.obj}} 
    <ul> 
    {{#each things}} 
     <li>{{this}}</li> 
    {{/each}} 
    </ul> 
{{/with}} 

答えて

68

は、Ember.js代わりに、プレーンアレイを使用する、だから

Ember.Array/Ember.MutableArray

、アレイラッパークラスを提供し、これらを使用する:

// JS 
App.obj = Ember.Object.create({ 
    "things": Ember.A(["1", "2"]) 
}); 
App.obj.things.pushObject("3"); // pushObject notifies observers 

// HTML + Handlebars 
{{#with App.obj}} 
    <ul> 
    {{#each things}} 
     <li>{{this}}</li> 
    {{/each}} 
    </ul> 
{{/with}} 
+0

パーフェクト。ありがとうございました! –

+7

pushObjectとその友人(popObject、removeAtなど)の参考資料:http://ember-docs.herokuapp.com/symbols/Ember.MutableArray.html –

+1

これらのメソッドを使用する必要がある理由は便利です。http ://stackoverflow.com/questions/14582759/ember-containerview-not-updating-in-response-to-childviews-push – zigomir

0

Ember.ArrayControllerのインスタンスを使用すると、単に[]で配列を宣言すると、Ember.ArrayControllerクラスの配列も作成されます。

Ember ArrayControllerの最後にObjectを追加する場合は、addObject()メソッドを使用できます。

例えば、

mutableArray:[], 

setModel:function(){ 

var data1={'id':1,'name':'over'}; 
var data2={'id':3,'name':'out'}; 

this.get('mutableArray').addObject(data1); 
this.get('mutableArray').addObject(data2); 

/* To Add Object to middle of array at given index simply use the native array splice method */ 

var data1={'id':2,'name':'and'} 
this.get('mutableArray').splice(1,0,data1); 

return this.get('mutableArray') 

}.property('mutableArray') 
+3

Ember.ArrayControllerの使用を避けることをお勧めします。代わりに、Ember.ArrayまたはEmber.ArrayProxyクラスを使用してください。 – SeanK

関連する問題