问题摘要:虽然我可以让一个集合的子节点(在ArrayController上定义)为个人使用特定的对象控制器,但这并不适用于子节点的过滤子集。
简短的背景:我有Subcriptions,它有物品。我希望按类型过滤我视图中的订阅,并让这些订阅中的项按时间戳排序。这是SubscriptionsController:
Social.SubscriptionsController = Ember.ArrayController.extend({
itemController: 'subscription',
announcements: function() {
return this.get('model').filterBy('kind', 'announcement');
}.property('model.@each.kind'),
user_sites: function() {
return this.get('model').filterBy('kind', 'user');
}.property('model.@each.kind')
});
我已经定义了SubscriptionController:
Social.SubscriptionController = Ember.ObjectController.extend({
items: function() {
return Ember.ArrayProxy.createWithMixins(Ember.SortableMixin, {
sortProperties: ['post_timestamp'],
sortAscending: false,
content: this.get('content.items')
});
}.property('content.items'),
});
这是我的车把模板的相关部分:
{{#each controller}}
<li>{{controller.description}} {{controller.kind}} {{controller.feed_url}} {{controller.base_url}}</li>
<ul>
{{#each item in controller.items}}
<li>{{item.post_timestamp}}: {{{item.summary}}}</li>
{{/each}}
</ul>
{{/each}}
这个代码或多或少做了我想要的:它呈现的项目,按item.post_timestamp排序,正如SubscriptionController定义的那样。
问题是如果我将{{#each controller}}
更改为{{#each site in user_sites}}
,则itemController属性似乎不会神奇地应用于子列表。在我的过滤器中是否应该使用某种法术来告知Ember,我宁愿为对象而不是对象本身返回控制器?
编辑添加:我知道我可以在Subscription模型本身上添加一个像sorted_items这样的新属性,但这在设计方面感觉不对。模型保存数据,视图显示数据,控制器处理排序/过滤和所有爵士乐。或至少是我对MVC分离的看法的一部分。
答案 0 :(得分:4)
您可以手动设置itemController
for循环。您可以在模板中尝试此操作:
{{#each site in user_sites itemController="subscription"}}
...
{{/each}}