2016-01-13 103 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