2015-06-21 70 views
0

我做了一個jsbin來重現問題,但是這個bug在jsbin上沒有發生。 http://emberjs.jsbin.com/mamunecene/edit?html,js,output每個助手不會觸發觀察屬性group.cards。[] [jsbin]

我有這樣的雙重每個幫助模板:

{{#each group in groups}} 
    {{#each card in group.cards}} 
     {{#play-card card=card group=group}}{{/play-card}}<br/> 
    {{/each}} 
    {{/each}} 

問題是play-card組件:

App.PlayCardComponent = Ember.Component.extend({ 
    number: function() { 
    return this.get('card.number'); 
    }.property('card'), 

    index: function() { 
    var card = this.get('card'); 
    var cards = this.get('group.cards'); 
    var idx = cards.indexOf(card); 

    return idx; 
    }.property('card', 'group.cards.[]') 
}); 

通知的index屬性觀察group.cards.[]。因此,無論何時添加/刪除新卡時,該組中的所有卡都應更新其索引。

在jsbin中工作正常。但是在我的真實例子中,它並沒有開火。那裏可能有什麼問題。

注意,我相信這是同一個問題,因爲我有這樣的解決方法,以強制更新所有的牌組中:

refreshModels: function() { 
    var cards = this.get('cards'); 
    var tempCards = []; 

    cards.forEach(function(card) { 
    tempCards.push(card); 
    }); 

    tempCards.forEach(function(card) { 
    cards.removeObject(card); 
    cards.addObject(card); 
    }); 
} 
+0

你的代碼是從陣列中添加和刪除卡的?請記住使用.pushObject和.removeObject或數組的觀察者將不會被通知 –

回答

0

很難找到工作示例中的錯誤,但有時它可以幫助觀察比您認爲可能需要的更多特性。請嘗試:

index: function() { 
    var card = this.get('card'); 
    var cards = this.get('group.cards'); 
    if (!card || !cards) { 
     return; 
    } 
    var idx = cards.indexOf(card); 

    return idx; 
}.property('card', 'group', 'group.cards', 'group.cards.[]') 

查看在您的控制檯,如果您有任何錯誤,請檢查您是否正在運行相同版本的灰燼在JS斌演示,檢查灰燼數據版本。