【发布时间】:2013-10-05 08:15:27
【问题描述】:
我有一个阵列控制器ActivitiesController,它负责管理一天的活动(相对于全套活动)。我已将ActivitiesRoute 的model 属性设置为以下内容:
return this.store.find('activity', {on_date: params.on_date});
这确实拉回了适当的记录,我可以在 Ember 调试器中看到它们,但由于某种原因,这些记录对模板不可用 (activities.hbs)。这让我感到莫名其妙,但实际上这并不是最终的解决方案(我只是期望它会起作用)。
我真正想做的是让控制器的内容管理一组 local Activity 已过滤到指定日期的记录。然后,此过滤后的数组将根据对更新查询的异步调用定期更新:find('activity', {on_date: this.get('on_date'), since: this.get('since');。
我希望描述是有道理的。我查看了关于 SO 的其他查询,并且有一些有希望的开始,但答案似乎都过时了,我可以找到任何可以帮助我解决这个问题的东西。
总之,我想:
- 让控制器的
content成为与给定日期对应的本地Activity记录的主动过滤器。 - 能够将其他记录异步推送到模型上,这些记录将自动显示在控制器上(假设它们是在适当的日期)。
顺便说一句,我特别想知道为什么我当前的 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 属性设置为DS.PromiseArray,我可以看到activities 属性的长度为15,这是活动的数量那天。
看起来ActivityRoute 的currentModel 设置为DS.FilteredRecordArray 并且其中也有相应的15 条记录,但我的车把模板仍然无法对其进行迭代。我认为这是因为未设置 ActivityController 的 content 属性。为什么在这种情况下 Ember 不执行此步骤?我是否需要强制执行此操作,或者系统中是否存在需要调整的小精灵?
【问题讨论】:
标签: ember.js ember-data