我发现这很奇怪,每当我在控制器中声明变量并想从模型中返回过滤后的值时,我都必须使用一个函数。但是当我尝试使用{{#each}}
它调用它给我一个错误。
Uncaught Error: Assertion Failed: The value that #each loops over must be an Array. You passed function () {
return this.store.filter('entry', function(entry) {
return (entry.get('entry_week') == moment().week());
});
}
我的控制器
App.CurrentWeekController = Ember.ArrayController.extend({
current_week: function() {
return this.store.filter('entry', function(entry) {
return (entry.get('entry_week') == moment().week());
});
}
});
编辑:路线
App.CurrentWeekRoute = App.AuthenticatedRoute.extend({
model: function() {
return this.store.find('entry');
},
setupController: function(controller, entries) {
controller.set('model', entries);
}
});
车把
{{#each current_week}}
{{description}}
{{/each}}
那么有什么更好的方法呢?实际上,我有很多模型实例,我需要按特定条件过滤它们并分别显示它们。
无论如何,如何让一个控制器变量包含一组过滤后的模型实例。
此外,您不必使用DS.Store#filter
,而应在模型上使用Ember.Enumerable#filterApp.CurrentWeekController
。该model
属性已经包含您所有App.Entry
记录的实时集合。
App.CurrentWeekController = Ember.ArrayController.extend({
current_week: function() {
return this.get('model').filter(function(entry) {
return (entry.get('entry_week') == moment().week());
});
}.property('@each.entry_week')
});
一个警告是current_week
阵列不会在moment().week()
更改时进行更新。您需要某种方式来确保current_week
在每周更改时重新计算。看看http://emberjs.com/guides/cookbook/working_with_objects/continuous_redrawing_of_views/可以得到一些启发。
假设您的模型为App.Entry
,请isCurrentWeek
在模型定义中定义一个计算属性,然后在模板中使用该属性以仅显示那些属性。
App.Entry = DS.Model.extend({
// ...
isCurrentWeek: function() {
return this.get('entry_week') == moment().week();
}.property('entry_week')
});
在您的模板中:
{{#each}}
{{#if isCurrentWeek}}
{{description}}
{{/if}}
{{/each}}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句