2013-10-05 31 views
1

作品ArrayController如何在{{#each sublist}}中不需要顯式itemController而具有子列表?

{{#each basicColours itemController='colour'}} 

ColoursController = Ember.ArrayController.extend({ 
    itemController: 'colour', 
    numBasicColours: 5, 
    basicColours: function(){ 
    return this.get('arrangedContent').slice(0, this.get('numBasicColours')) 
    }.property('arrangedContent'), 
}); 

,但我希望能夠做到這一點,而不在每個呼叫的itemController='colour',特別是因爲這種選擇不擡頭動態,即,我不能做itemController=itemController

+0

這可能不是你以後的樣子,但是你只需要在你的控制器中的循環_or_中聲明itemController。儘管上述方法可行 – chopper

+0

數組控制器確實定義了一個itemController,並且一個空的'{{#each}}'按預期工作,在循環內部提供了一個'ColourController'實例。然而,'{{#each basicColours}}'導致迭代器'this'是一個'Colour',而不是'ColourController',除非明確設置了itemController。問題的原因是,我只想在array_controller中聲明它。 –

回答

3

問題是你在basicColours計算屬性(不是數組控制器)迭代(使用每個)。如果你想要應用itemController屬性,你需要通過控制器本身(這是當你做{{#each}}時會發生什麼(也可能是這些{{#each item in this}}或{{#each在控制器項目}})。

你也可以只創建另一個模板,並調用 {{渲染「otherTemplate」 basicColours}}

那麼它將使用OtherTemplateArrayController您可以itemController增加,然後內容控制器將是您的計算屬性。

在模板中:

{{ render 'otherTemplate' basicColours}} 

ColoursController = Ember.ObjectController.extend({ 
numBasicColours: 5, 
basicColours: function(){ 
    return this.get('arrangedContent').slice(0, this.get('numBasicColours')) 
}.property('arrangedContent'), 
}); 

OtherTemplateArrayController = Ember.ArrayController.extend({ 
    itemController: 'colour' 
}); 
相關問題