2017-01-23 61 views
0

等等。我有這個在我的component.js:用setter和getter計算的bug燼012

… 
inputs: Ember.A(), 

inputGroup: computed('inputs.[]', { 
    get() { 
     return this.get('inputs').mapBy('value'); 
    }, 
    set(_, values) { 
    # breakpoint 1 
     if (values) { 
     values.forEach(value => { 
      this.get('inputs').addObject({ id: Symbol(), value: value }); 
     }); 
     } 
    # breakpoint 2 
     return this.get('inputs').mapBy('value'); 
    }, 
    }), 
... 

,我有這個組件的2我app.hbs:

{{addon-component inputGroup=firstGroup … }} {{addon-component inputGroup=secondGroup … }} 

與app.js:

… 
firstGroup: Ember.A([’[email protected]’]), 
secondGroup: Ember.A(), 
… 

我第一個組件,調試器# breakpoint 1,inputs === [],# breakpoint 2,inputs === ['[email protected]'] 在我的第二個,調試器上# breakpoint 1,已經是inputs === [‘[email protected]’]。 這怎麼可能?

+0

很難知道這裏發生了什麼,沒有更多的細節。你最好打賭是使用https://ember-twiddle.com/並創建你看到的問題的複製。 –

回答

2

您不應該直接在組件上聲明數組或對象。以這種方式聲明的數組或對象在組件實例之間共享。你需要在init鉤子中聲明它們,這樣它們將被設置爲獨立於每個組件實例。所以你需要用這種方式來聲明輸入。

//inside component 
init() { 
    this._super(...arguments); 
    this.set('inputs', Ember.A()); 
} 

the guide

數組和直接在任何Ember.Object定義的對象跨越該對象的所有實例共享 。