0

我有一个阵列控制器ActivitiesController,它负责管理一天的活动(相对于全套活动)。我已将 的model属性设置ActivitiesRoute为以下内容:

return this.store.find('activity', {on_date: params.on_date});

这确实拉回了适当的记录,我可以在 Ember 调试器中看到它们,但由于某种原因,这些记录对模板 ( activities.hbs) 不可用。这让我感到莫名其妙,但实际上这不是最终的解决方案(我只是期望它会起作用)。

我真正想做的是让控制器的内容管理一组已过滤到指定日期的本地记录。 Activity然后,此过滤后的数组将根据对更新查询的异步调用定期更新:find('activity', {on_date: this.get('on_date'), since: this.get('since');

我希望描述是有道理的。我查看了关于 SO 的其他查询,并且有一些有希望的开始,但答案似乎都过时了,我可以找到任何可以帮助我解决这个问题的东西。

总之,我想:

  1. 让控制器成为与给定日期相对应content的本地记录的活动过滤器。Activity
  2. 能够将其他记录异步推送到模型上,这些记录将自动显示在控制器上(假设它们适用于适当的日期)。

顺便说一句,我特别想知道为什么我当前model的钩子在活动模板中不可用。

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

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

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;
});

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

this.set('activities', this.store.find('activity', {on_date: params.on_date}));

使用调试器,我可以看到ActivityRoute有一个activities设置为 a 的属性,DS.PromiseArray我可以看到该activities属性的长度为 15,这是当天的活动数。

看起来currentModelofActivityRoute也设置为 aDS.FilteredRecordArray并且它也有适当的 15 条记录,但我的车把模板仍然无法迭代它。我认为这是因为未设置的content属性。ActivityController为什么在这种情况下 Ember 不执行此步骤?我是否需要强制执行此操作,或者系统中是否存在需要梳理的小精灵?

4

1 回答 1

2

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

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

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

于 2013-10-05T08:39:28.247 回答