简短的上下文 - 我正在使用 ember 和 ember-data 向用户呈现事件列表。事件在 API 端点中聚合,每个事件甚至都有一个“种类”属性来记录事件的类型(公告等)。事件由用户在 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(),
这有效,至少在我的测试用例中。不过,我不确定这是做事的正确方式。我还没有完全理解属性(似乎在控制器上设置)和模型(路由设置)之间的区别。所以,我的问题是:
- 这是创建过滤数据子列表的正确方法吗?我不应该依赖 .get('model') 调用来提取基础数据吗?
- property() 调用实际上应该命名任何东西吗?这些应该在底层模型更改时重新计算,但据我所知,当您将垃圾传递给 property() 调用时,ember 是安静的({}.property('potato') 不会失败),所以我不知道 .property('model') 或 .property('@each') 在这里是否合适。