我的目标是将过滤后的数据传递给我的控制器,然后传递给我的模板。我试过不使用过滤器,一切都按预期工作。如果我甚至尝试使用过滤器让一切都通过,我不会得到任何数据。我甚至尝试使用false而不是true并且使用过滤器的参数列表。
我正在使用ember-data fixture来测试它。我正在遵循名称惯例,因此很多工作都是为我完成的。这一切似乎都有效(否则第一个例子也应该有问题)。
Works(到达控制器并最终在页面上呈现):
App.DomainDirRoute = Ember.Route.extend({
model: function(params) {
return this.store.find('domain_dir');
}
});
失败(控制器获取一个空数组):
App.DomainDirRoute = Ember.Route.extend({
model: function(params) {
return this.store.filter('domain_dir', function(item){
return true;
});
}
});
更新(ATTEMPT 1):
好的,所以我根据Sam Selikoff的回答尝试了几件事。我在控制器中定义了4个属性(2个过滤器,一个映射,一个普通副本),并尝试在模型页面中显示每个属性。只有属性copyDomain才会给出结果。
控制器中的属性:
filteredDomains: Ember.computed.filterBy('domain', 'domain', true),
upperCaseDomains: Ember.computed.map('domain', function(domain, index) {
return domain.toUpperCase() + '!';
}),
filteredDomains2: function() {
return this.get("model").filterBy('domain', true);
}.property('model.@each.domain'),
copyDomains: function(){
result = [];
this.forEach(function(item) {
result.pushObject(item);
})
console.log(result);
return result;
}.property('model.@each.domain')
样机:
<ul>
<li>filteredDomains</li>
{{#each domainDir in controller.filteredDomains}}
<li>domainDir.domain</li>
{{/each}}
</ul>
<ul>
<li>filteredDomains2</li>
{{#each domainDir in controller.filteredDomains2}}
<li>domainDir.domain</li>
{{/each}}
</ul>
<ul>
<li>upperCaseDomains</li>
{{#each domainDir in controller.upperCaseDomains}}
<li>domainDir.domain</li>
{{/each}}
</ul>
<ul>
<li>copyDomains</li>
{{#each domainDir in controller.copyDomains}}
<li>domainDir.domain</li>
{{/each}}
</ul>
答案 0 :(得分:1)
过滤通常在控制器/组件级别完成。 store.find
发出AJAX请求。您的目标是仅从服务器检索已过滤的数据子集,还是过滤您在视图层已有的数据?
通常,如果您只想进行一些实时过滤,则可以在控制器中进行。将模型挂钩保留为this.store.find('domain_dir')
并在控制器中添加过滤器:
App.DomainDirController = Ember.Controller.extend({
filteredDomains: function() {
return this.get("model").filterBy('someProp', true);
}.property('model.@each.someProp')
});
您还应该查看computed macros的一些简介:
App.DomainDirController = Ember.Controller.extend({
filteredDomains: Ember.computed.filterBy('model', 'someProp');
});
现在,您可以在模板中执行
{{#each domain in filteredDomains}}
...