我有一个输出数据表的每个循环。每行包括created_date,title,publisher和category。为了在相关控制器中使用sortProperties(通过created_date对帖子进行排序),我将其设置为循环控制器:
<button {{action 'reverseOrder' 'created_date'}}>Reverse Date Order</button>
{{#each controller as |post|}}
...
{{/each}}
&#13;
我还希望有按钮按其他列过滤此列表(例如发布者)。我查看了this jsbin example,它将filteredContent传递给模板中的每个帮助器,然后在控制器中使用它来进行过滤:
{{#each filteredContent}}
...
{{/each}}
&#13;
App.IndexController = Em.ArrayController.extend({
filteredContent: [],
actions: {
filterByPublisher: function(filterFn) {
this.set('filteredContent', this.get('model').filter(filterFn));
}
}
});
&#13;
将filteredContent传递给已指定控制器的每个帮助程序的正确方法是什么?
我尝试了各种各样的事情 -
{{#each controller as |post| filteredContent}}
{{#each filteredContent controller as |post|}}
&#13;
但是我收到如下错误:
未捕获错误:断言失败:如果您将多个参数传递给每个帮助器,则它必须采用{{#each foo in bar}}
的形式答案 0 :(得分:0)
您无法将两个参数传递给{{#each}}
。 {{#each}}
助手只接受一个参数,这是一个要迭代的数组。
创建一个计算属性,该属性将返回根据所有选项排序和过滤的数据数组。
示例:
// Item format: {foo: 1, bar: 2, baz: 5}
result: Ember.computed(
'model.@each.foo',
'model.@each.bar',
'model.@each.baz',
'sortColumn',
'sortAsc',
'filterMinFoo',
'filterMinBar',
'filterMinBaz',
function() {
var filterMinFoo = this.get('filterMinFoo');
var filterMinBar = this.get('filterMinBar');
var filterMinBaz = this.get('filterMinBaz');
var result = this
.get('model')
.filter(function(item) {
return item.get('foo') >= filterMinFoo &&
item.get('bar') >= filterMinBar &&
item.get('baz') >= filterMinBaz;
})
.sortBy(this.get('sortColumn'));
return this.get('sortAsc') ? result : result.reverse();
}
)