过滤的本地模型记录数组

时间:2013-10-05 08:15:27

标签: ember.js ember-data

我有一个数组控制器ActivitiesController,它负责管理一天的活动(相对于整套)。我已将model的{​​{1}}属性设置为以下内容:

ActivitiesRoute

这会拉回相应的记录,我可以在Ember调试器中看到它们,但由于某些原因,这些记录不可用于模板(return this.store.find('activity', {on_date: params.on_date}); )。这对我来说是令人困惑的,但实际上并不是最终的解决方案(我原本预计它会起作用)。

我真正想要做的是让控制器的内容管理一系列已过滤到指定日期的本地 activities.hbs记录。然后,此筛选的数组将根据对更新查询的异步调用定期更新:Activity

我希望这种描述有意义。我已经看了SO上的其他问题并且有一些有希望的开始,但答案似乎都过时了,我可以找到任何帮助我破解这个问题的东西。

总之,我想:

  1. 让控制器的find('activity', {on_date: this.get('on_date'), since: this.get('since');成为与给定日期对应的本地content记录的有效过滤器。
  2. 能够将其他记录异步推送到模型上,该模型将自动显示在控制器上(假设它们适用于相应的日期)。
  3. 顺便说一句,我特别想知道为什么我当前的Activity钩子不能用于活动模板。

    -------------更新-------------

    我在我的模型钩子中试过这个:

    model

    这应符合@ Bradley的建议。我需要截断时间组件,所以我使用moment.js库添加了该逻辑。这并没有抛出任何错误,但也没有从服务器中提取任何记录,因此我将以下代码行添加到模型钩子中:

    return this.store.filter('activity',function(activity){
        var itemDate = new Date(activity.get('start_time'));
        itemDate = moment(itemDate).format('YYYY-MM-DD');
        return itemDate === params.on_date;
    });
    

    使用调试器我可以看到this.set('activities', this.store.find('activity', {on_date: params.on_date})); 的{​​{1}}属性设置为ActivityRoute,我可以看到activities属性的长度为15这是当天的活动数量。

    DS.PromiseArray的{​​{1}}似乎也设置为activities,它也有相应的15条记录,但我的手柄模板仍无法迭代它。我假设这是因为currentModel的{​​{1}}属性未设置。在这种情况下,为什么Ember没有采取这一措施?我是否需要强制这个或者系统中是否存在需要取笑的小鬼?

1 个答案:

答案 0 :(得分:2)

对于本地过滤,您正在寻找DS.Store#filter功能。

return this.store.filter('activity', function(activity) { 
  activity.get('on_date') === params.on_date
});

这会返回一个DS.FilteredRecordArray,它使用新的/更新的记录进行实时更新