更新ArrayController中的元素

时间:2012-06-12 01:12:29

标签: ember.js

更新ArrayController的content属性中元素的最佳方法是什么,以便更新任何关联的视图。

目前,我使用以下代码来更新内容但不更新视图

    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,因为设备状态随着更新视图而改变。

2 个答案:

答案 0 :(得分:3)

您搜索的方法名称为replace(可在MutableArray中找到,ArrayProxy继承自。) 请注意,API的不同之处在于您传递要插入的元素数组,例如

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

正如@ebryn所述,数组的拼接没有被覆盖,原始方法确实改变了数组的内容,但是没有通知观察者,视图(由把手处理的DOM变化)可能就是其中之一。

我在版本0.96中检查了这个。

答案 1 :(得分:1)

您没有在内容数组上使用可观察数组方法,这就是视图未更新的原因。

有关可观察数组方法的列表,请参阅Ember.Array / Ember.Enumerable文档:

http://docs.emberjs.com/#doc=Ember.Array&src=false

http://docs.emberjs.com/#doc=Ember.Enumerable&src=false