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

Ember : How to update a single field in an array of JSON objects in a controller?

本文关键字:对象 JSON 数组 字段 单个 控制器 何更新 更新 Ember      更新时间:2023-09-26

如何在控制器中将爱因斯坦的分数更新为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] I tried using:

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

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

我发现了烬的方法:

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

您可以使用.findBy来查找记录并给它一个新值。

如果你不使用烬数据为你的数据层,那么我也会使数组的对象烬对象,所以你可以使用.get.set来更新属性。

这是一个完整的JSBin,你要完成的是什么

你到底想把分数设置为100?

如果你的物品是灰烬物品

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

您将能够使用setter作为items[1].set('score', 100)