0

简短的上下文 - 我正在使用 ember 和 ember-data 向用户呈现事件列表。事件在 API 端点中聚合,每个事件甚至都有一个“种类”属性来记录事件的类型(公告等)。事件由用户在 api 级别过滤(因此您必须查询 user_id 以获取用户的事件列表。

我需要在一个页面上显示所有这些事件,但要按种类分解它们。有一个固定的种类列表,所以我们可以称它们为 A 和 B。

我的直觉是在 EventsRou​​te 中设置模型,如下所示:

model: function () {
 return this.store.find('events', {user_id: $.cookie('user_id')});
}

然后使各种事件类型成为 EventsController 上的过滤器:

announcements: function() {
  return this.get('model').filterBy('kind', 'announcement');
}.property(),

这有效,至少在我的测试用例中。不过,我不确定这是做事的正确方式。我还没有完全理解属性(似乎在控制器上设置)和模型(路由设置)之间的区别。所以,我的问题是:

  1. 这是创建过滤数据子列表的正确方法吗?我不应该依赖 .get('model') 调用来提取基础数据吗?
  2. property() 调用实际上应该命名任何东西吗?这些应该在底层模型更改时重新计算,但据我所知,当您将垃圾传递给 property() 调用时,ember 是安静的({}.property('potato') 不会失败),所以我不知道 .property('model') 或 .property('@each') 在这里是否合适。
4

1 回答 1

1

这是创建过滤数据子列表的正确方法吗?我不应该依赖 .get('model') 调用来提取基础数据吗?

是的,这是正确的方法。由于这是一个 ArrayController,您可以使用 .get('model') 或 .get('content') 来访问数组。

property() 调用实际上应该命名任何东西吗?

是的,它应该列出导致重新计算属性的依赖项。如果它们不存在,那么余烬肯定是安静的。在这种情况下,您应该使用.property('model.@each.kind')

于 2013-09-03T23:38:11.573 回答