Ember:如何更新控制器中JSON对象数组中的单个字段?

时间:2015-08-03 19:00:57

标签: javascript json ember.js ember-cli

如何在控制器中将爱因斯坦的得分更新为100?

在控制器中,我有一组JSON对象,如:

items = [
         {title:"John", score:24},
         {title:"Einstein", score:2},
         {title:"Mary", score:19}
        ];

使用如下组件在模板中呈现:

{{#each items as |item|}}
  {{some-child-component scoreVal=item.score}}
{{/each}}

如何将爱因斯坦的得分更新为100?我只想更改该特定字段并将其反映在应用程序中。

我想避免用新的(几乎相同的)替换整个数组,因为这会导致模板中所有组件的刷新。

[FAILED]我尝试使用:

var allItems = this.get('items');
allItems[1]['score'] = 100; //ERROR

另外

   this.set('items[1][score]',100); //ERROR

3 个答案:

答案 0 :(得分:1)

你究竟想把分数设定为100?

如果你制作物品灰烬物品

items = [
         {title:"John", score:24},
         {title:"Einstein", score:2},
         {title:"Mary", score:19}
        ].map(function(item) { return Ember.Object.create(item) });

您可以将设置器用作items[1].set('score', 100)

答案 1 :(得分:1)

我发现了Ember的做法:

var elem = items.objectAt(1);
Ember.set(elem, 'score', 100);

答案 2 :(得分:0)

您可以使用.findBy查找记录并为其指定新值。

如果您没有将Ember数据用于数据层,那么我还会创建对象数组Ember Objects,以便您可以使用.get.set来更新属性。

这是你正在努力完成的full JSBin