如何在每个循环中更新模型的对象

时间:2014-08-18 09:46:21

标签: javascript ember.js

我尝试在每个循环中更新模型中的每个对象

我想将size属性添加到模型中的每个对象。

但似乎没有用。

CONSOLE(在我添加size属性后它没有工作)

self.model().get(i).size=123
>> 123

self.model().get(i)
>>
id: 1
name: "URL_Command_Comparison"
rounds: 2
team: "cvt"
__proto__: Object

CODE

  model: function(){
    return Ember.A([
      {id: 1, name: 'URL_Command_Comparison', 
        team: 'cvt'
      },
      {id: 2, name: 'Auto Test',
        'manualHours':20 ,'autoHours': 3, 
      ....
$.each(this.model(),function(i,d){
  self.model().get(i).set("size",self.perRoundROI(d)*d.rounds*d.coverage)
});

1 个答案:

答案 0 :(得分:2)

首先,你可能永远不应该调用模型钩子(this.model())。当路由器构建当前URL /转换的上下文时,它会被路由器调用。如果要在转换完成后从路径访问模型,可以使用this.currentModel。如果要在转换管道中的其他位置访问它,通常会将其传递到公共挂钩(afterModelsetupController)。 http://emberjs.com/api/classes/Ember.Route.html#method_afterModel如果您想从更深层次的嵌套路线访问它,可以使用this.modelFor('foo'),其中foo是其他路线的名称。

在您的特定情况下,我将您的对象包装在Ember对象中,并创建一个计算属性,为您计算。很酷的是,如果你改变计算属性所依赖的任何其他属性,它将重新计算。

对象

App.CoolObject = Em.Object.extend({
  size: function(){
    return this.get('rounds') * this.get('coverage'); // or whatever it is you want here
  }.property('rounds', 'coverage')
});

路线

model: function(){
    return Ember.A([
      {id: 1, name: 'URL_Command_Comparison', 
        team: 'cvt'
      },
      {id: 2, name: 'Auto Test',
        'manualHours':20 ,'autoHours': 3, 
      }]);
},

setupController: function(controller, model){
  model = model.map(function(item){
    return App.CoolObject.create(item);
  });
  this._super(controller, model);
}

示例:http://emberjs.jsbin.com/nupoko/1/edit