2016-01-13 57 views
0

我有一个Ember路线类定义如下;Ember问题与设置属性值

export default Ember.Route.extend({ 
    model: function() { 
     var compObj = {}; 
     compObj.gridPara = this.get('gridPara'); 
     return compObj; 
    }, 
    gridPara: function() { 
     var self = this; 
     var returnObj = {}; 
     returnObj.url = '/myService'; 
     // setting some other returnObj attributes 
     var summaryObj = { 
      total: { 
       label: "Total 1", 
       value: "100" 
      }, 
      additional: [{ 
       label: 'Label 2', 
       value: 'val2' 
      }, { 
       label: 'Label 3', 
       value: 'val3' 
      }] 
     }; 
     returnObj.summary = summaryObj; 
     return returnObj; 
    }, 
    actions: { 
     dataLoaded: function(resp) { 
      // Here I get the service response and want to set (or overwrite) the summaryObj values 
      this.get('gridParams').summary.total.value = resp.numRows;   
     } 
    } 
}); 

我的模板看起来像

{{my-grid params=this.gridPara dataLoaded="dataLoaded"}} 

现在我想设置returnObj 的“摘要”我已验证我得到dataLoaded回调里面的“响应”。

但试图做的时候,我得到以下错误

this.get('gridParams').summary.total.value = resp.numRows;  

未捕获的错误:断言失败:必须使用Ember.set()来(的[目标对象])的value属性设置为100

还有我怎么设置里面summaryObj

回答

1

由于错误状态,则必须使用set到值“额外的”阵列/ PUSH(IM假设你已经gridParams地方定义?):

this.set('gridParams.summary.total.value', resp.numRows); 

为了推动一个新的对象,试试这个:

var additional = this.get('gridParams.additional'); 
additional.push({label: ..., value: ....}); 
this.set('gridParams.additional', additional); 
+0

Thx..Just一个问题...我如何更新此“额外的”阵列内的任何现有值......说我要更新的第一个项目的(或者如果可能的话,有一个标签值)'值'到'NEW_VAL'? 所以我不想继续推动,但更新现有的数组项目 – testndtv

0

不是100%肯定,但不妨一试:

  • 注意房产的名称。我想这是一个用词错误申报“gridPara”,并试图让“gridParams”
  • 你应该取回这样
    this.get('gridParams.summary.total.value')
  • 您正在使用的最后一句话想什么是设置的值,但就像是平原JS。在灰烬你应该这样做this.set('gridParams.summary.total.value',resp.numRows)
0

只是增加@Remi答案,最好的做法是使用

Ember.set('gridParams.summary.total.value', resp.numRows); 

要回答这个问题在您的评论 说你要在更新additional阵列指数i。只是做

var updateItem = additional[i]; 
Ember.set(updateItem.propertyname,newValue) 
//Here propertyname would be the property you want to update and new Value is the new value which you want to set to that property