Ember.js如何连接两个对象

时间:2013-05-20 19:38:12

标签: javascript ember.js

我在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中也未显示。有什么想法吗?

感谢。

3 个答案:

答案 0 :(得分:2)

我想问题是使用concathttp://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'));

希望这有帮助!