gpt4 book ai didi

ember.js - 在 ArrayController 模型的过滤子集上设置 itemController

转载 作者:行者123 更新时间:2023-12-02 05:44:57 28 4
gpt4 key购买 nike

问题摘要:虽然我可以让集合(在 ArrayController 上定义)的子项为个体使用特定的对象 Controller ,但这不适用于子项的过滤子集。

简短上下文:我有订阅,其中有项目。我想按类型过滤我 View 中的订阅,并让这些订阅中的项目按时间戳排序。这是 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'),
});

这是我的 Handlebars 模板的相关部分:

{{#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 我宁愿返回对象的 Controller 而不是对象本身吗?

编辑添加:我知道我可以在订阅模型本身上添加一个新属性,如 sorted_items,但从设计的角度来看,这感觉不对。模型保存数据, View 显示数据, Controller 处理排序/过滤和所有爵士乐。或者至少这是我对 MVC 分离的部分看法。

最佳答案

您可以手动设置 itemController for 循环。您可以在模板中尝试这样做:

{{#each site in user_sites itemController="subscription"}}
...
{{/each}}

关于ember.js - 在 ArrayController 模型的过滤子集上设置 itemController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18665085/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com