使用计算属性过滤对象列表?

时间:2013-09-03 23:17:58

标签: ember.js

短上下文 - 我使用ember和ember-data向用户显示事件列表。事件在API端点中聚合,每个事件甚至都有一个“kind”属性,用于记录事件的类型(公告等)。用户在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')是否合适。

1 个答案:

答案 0 :(得分:1)

  

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

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

  

property()调用实际上是否应该命名?

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