我在Ember中有一个对象(我们称之为existing
):
var existing = {
items: [
...
],
...
}
在点击服务器端请求的回调中,有一个名为result
的新响应与existing
相同。我需要在现有内容中使用items
,并将它们添加到新的result
中。所以我有以下内容:
var result = { ... };
var existing = this.get('content');
result.items = result.items.concat(existing.items);
this.set('content', result);
问题是,在模板中呈现时,它只是显示来自result
的新项目,existing
中的旧项目即使在items
中也未显示。有什么想法吗?
感谢。
答案 0 :(得分:2)
我想问题是使用concat
(http://emberjs.com/api/classes/Ember.Array.html)不支持的Ember.Array
不会触发绑定,因此您的视图不会更新。要合并项目数组,您可以执行以下操作:
var result = { ... };
var existing = this.get('content');
result.items.forEach(item) {
existing.items.pushObject(item);
}
this.set('content', existing);
希望有所帮助
答案 1 :(得分:0)
如果result.items是一个数组,并且你想使用javascript concat方法,你可以在可枚举的existing.items上调用toArray。
var result = { ... };
var existing = this.get('content');
result.items = result.items.concat(existing.get('items').toArray());
this.set('content', result);
如果result.items已经是Ember.Enumerable,我会使用pushObjects或addObjects。 http://emberjs.com/api/classes/Ember.MutableArray.html#method_addObjects
var result = { ... };
var existing = this.get('content.items');
result.items = result.get('items').addObjects(existing);
this.set('content', result);
答案 2 :(得分:0)
我认为这是一个老帖子,但由于没有接受的答案,我认为我会投入我觉得最好的选择。我最近发现自己需要将一堆DS.ManyArray
连在一起,这就是我提出的解决方案:
var myArrayOfHasManyArrays = ...;
var concatenated = [].concat.apply([], myArrayOfHasManyArrays.invoke('toArray'));
希望这有帮助!