短上下文 - 我使用ember和ember-data向用户显示事件列表。事件在API端点中聚合,每个事件甚至都有一个“kind”属性,用于记录事件的类型(公告等)。用户在api级别过滤事件(因此您必须在user_id上查询以获取用户的事件列表。
我需要在一个页面上显示所有这些事件,但要按类别分解。有一个固定的种类列表,所以我们可以称它们为A和B.
我的直觉是在EventsRoute中设置模型,如下所示:
model: function () {
return this.store.find('events', {user_id: $.cookie('user_id')});
}
然后使各种事件类型成为EventsController上的过滤器:
announcements: function() {
return this.get('model').filterBy('kind', 'announcement');
}.property(),
至少在我的测试用例中,这是有效的。不过,我不确定这是采取行动的正确方法。我还没有完全理解属性(似乎在控制器上设置)和模型(路由设置)之间的区别。所以,我的问题是:
答案 0 :(得分:1)
这是创建过滤的数据子列表的正确方法吗?我不应该依赖.get('model')调用来提取基础数据吗?
是的,这是正确的方法。由于这是一个ArrayController,您可以使用.get('model')或.get('content')来访问数组。
property()调用实际上是否应该命名?
是的,它应该列出导致重新计算属性的依赖项。如果它们不存在,那么它肯定是安静的。在这种情况下,您应该使用.property('model.@each.kind')