2013-11-14 97 views
1

如何添加控制器屬性到arrayController中的每個項目?如何將屬性添加到EmberJS arrayController

例如,如果我命名屬性「isExpanded」,我希望能夠做這樣的事的模板:

{{#each controller}} 
    {{#if isExpanded}} 
     expanded content 
    {{else}} 
     non-expanded content 
    {{/if}} 
{{/each}} 

請注意,我不能在實際的應用中使用ObjectController;請在下面的Kingpin2回覆後看到我的評論。

回答

1

使用項目控制器,並將該屬性添加到項目控制器。它是一個控制器,將用於控制器列表中的每個項目。

App.ColorsController = Em.ArrayController.extend({ 
    itemController: 'color' 
}); 

App.ColorController = Em.ObjectController.extend({ 
    isExpanded: false 
}); 

http://emberjs.jsbin.com/iSaJELug/2/edit

如果你正在談論的isExpanded的arraycontroller範圍,它只是簡單:

http://emberjs.jsbin.com/iSaJELug/3/edit

{{#each item in controller}} 
    {{#if controller.isExpanded}} 
    <li>Color: {{item.color}} and Class: {{item.class}}</li> 
    {{else}} 
    <li>Color: {{item.color}}</li> 
    {{/if}} 
{{/each}} 

App.IndexController = Em.ArrayController.extend({ 
    isExpanded: false, 
}); 

最後一個音符,當你剛剛說{{each controller}}你正在改變範圍,從範圍內的控制器到範圍內的項目,並且如果你想訪問t他控制器屬性,然後需要用controller.isExpanded來限定財產。

+0

不,在我的真實應用程序中,我需要一個數組控制器。該數組控制器與具有子路由的父路由相關聯。 因此,在原始發佈中推斷我的示例,我想要使用「isExpanded」控制器屬性來決定是否展開arraycontroller中的每個數組成員。 – ptmoy2

+0

我沒有說不使用數組控制器,我說也使用了一個項目控制器。 isExpanded在哪裏住?它是否在控制器中的每個項目上,還是控制着所有項目是否存在? – Kingpin2k

+0

我已經在數組控制器上添加了另一個示例 – Kingpin2k