2015-10-02 30 views
0

我有一個組件:得到,然後設置一個新的屬性就可以了

App.MyChildComponent = Ember.Component.extend({ 
    addTooltips: Ember.on('didInsertElement', function() { 
    var me = this; 
    var metrics = this.get('option.metrics'); 
    metrics.forEach(function(e, i) { 
     me.get('option.metrics').objectAt(i - 1).set('tooltipDisabled', true); 
    }); 
    }); 
}) 

這是由不同成分的每個循環中產生的:

App.MyParentComponent = Ember.Component.extend({ 
    ... 
}) 

而且MyParentComponent的模板是:

{{#each option in options}} 
    {{my-child option=option}} 
{{/each}} 

所有這一切,是通過視圖調用這樣的一個模板:

{{my-parent options=options}} 

選項是與視圖的模型中定義:

App.MyViewModel = Ember.Object.extend({ 
    options: Ember.A([ 
     { metrics: Ember.A([ 
      { name: 'a' }, 
      { name: 'b' }, 
      { name: 'c' } 
     ]) }, 
     { metrics: Ember.A([ 
      { name: 'd' }, 
      { name: 'e' }, 
      { name: 'f' } 
     ]) }, 
     { metrics: Ember.A([ 
      { name: 'g' }, 
      { name: 'h' }, 
      { name: 'i' } 
     ]) } 
    ]), 
}); 

當我運行me.get('option.metrics').objectAt(i - 1).set('tooltipDisabled', true);我得到:

Uncaught TypeError: me.get(...).objectAt(...).set is not a function 

我在做什麼錯?

回答

1

Vanilla JavaScript對象沒有設置方法。使用Ember.Object!而非:

App.MyViewModel = Ember.Object.extend({ 
    options: Ember.A([ 
     { metrics: Ember.A([ 
      Ember.Object.create({ name: 'a' }), 
      // ... 
     ]) } 
    ]), 
}); 

Demo.

相關問題