2016-01-13 3 views
0

У меня есть класс Ember Route, как указано ниже;Проблема с 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;  

Uncaught Ошибка: Assertion Ошибка: Вы должны использовать Ember.set(), чтобы установить value свойство (в [объект Object]) для 100.

Кроме того, как я устанавливаю/толчок для «дополнительного» массива внутри summaryObj

ответ

1

Как говорится об ошибках, вы должны использовать set к значению (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 еще один вопрос ... Как обновить все существующие значения внутри этого «дополнительного» массива ... Скажу, я хочу, чтобы обновить первый элемент (или, если возможно, с определенным значением метки) 'value' до "NEW_VAL"? Так что я не хочу продолжать толкать, но обновлять существующий элемент массива – testndtv

0

не 100% уверен, но дать ему попробовать:

  • Остерегайтесь названий объектов недвижимости. Я предполагаю, что это ошибка формулировки, чтобы объявить «gridPara» и пытается получить «gridParams»
  • Вы должны получить значение, как этот
    this.get('gridParams.summary.total.value')
  • То, что вы пытаетесь с последним предложением является параметр, но как это было простой JS. В Ember вы должны сделать это this.set('gridParams.summary.total.value',resp.numRows)
0

Просто добавляя к @Remi ответы, лучшая практика будет использовать

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

Чтобы ответить на этот вопрос в своем комментарии Допустим, вы хотите обновить additional массив в индекс i .Just сделать

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 
Смежные вопросы