2012-06-12 55 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所指出的,方法签名略有不同:它接受要插入的元素数组,而不是接受可变长度的参数列表。 –