2012-06-12 108 views
0

什麼是更新ArrayController的content屬性中元素的最佳方法,以便更新任何關聯的視圖。更新ArrayController中的元素

目前,我用下面的代碼段,其中更新內容,但不認爲

updateContent: function(device) { 
     for (var index = 0; index < this.content.length; index++) { 
      if (this.content[index]._id === device._id) { 
       this.content.splice(index, 1, device); 
       break; 
      } 
     } 
    } 

什麼是這樣做的最佳方法?

在這種特殊情況下,我使用soket.io接收來自服務器的呼叫,因爲在相應地更新視圖時設備狀態發生變化。

回答

3

你搜索的方法名稱replace(在MutableArray發現,其中ArrayProxy繼承自)。
請注意,API的不同之處在於您傳遞了一組要插入的元素,例如,

this.content.splice(index,1,[ device ]);

正如@ebryn所述,數組的拼接沒有被覆蓋,原始方法確實改變了數組的內容,但不通知觀察者,視圖(DOM變化由handlebars處理)可能是其中的一個。

我已經在0.96版中檢查了它。

+0

這與Ember 1.0+仍然相關:[Ember.MutableArray.replace](http://emberjs.com/api/classes/Ember.MutableArray.html#method_replace)是JavaScript的Array的Observer兼容等價物。拼接。正如@shex所指出的,方法簽名略有不同:它接受要插入的元素數組,而不是接受可變長度的參數列表。 –