2

我在 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来自的旧项目。任何想法为什么?existingitems

谢谢。

4

3 回答 3

2

我猜问题是(http://emberjs.com/api/classes/Ember.Array.html )不支持使用concatwhich不会触发绑定,因此您的视图不会更新。要合并项目数组,您可以执行以下操作:Ember.Array

var result = { ... };
var existing = this.get('content');
result.items.forEach(item) {
  existing.items.pushObject(item);
}
this.set('content', existing);

希望能帮助到你

于 2013-05-20T20:00:48.333 回答
0

如果 result.items 是一个数组,并且您想使用 javascript concat 方法,您可以在现有的.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);
于 2013-05-20T20:01:07.557 回答
0

我看到这是一篇旧帖子,但由于没有公认的答案,我想我会提出我认为最好的选择。我最近发现自己需要将一堆DS.ManyArray连接在一起,这就是我想出的解决方案:

var myArrayOfHasManyArrays = ...;
var concatenated = [].concat.apply([], myArrayOfHasManyArrays.invoke('toArray'));

希望这可以帮助!

于 2015-08-29T16:24:07.430 回答