0

更新 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 接收来自服务器的调用,因为设备状态会在相应地更新视图时发生变化。

4

2 回答 2

3

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

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

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

我已经在 0.96 版中检查了这一点。

于 2012-12-11T13:26:45.840 回答
1

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

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

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

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

于 2012-06-12T02:28:46.743 回答