gpt4 book ai didi

javascript - 过滤器的 Ember.js 路由问题

转载 作者:行者123 更新时间:2023-11-29 15:35:50 26 4
gpt4 key购买 nike

我的目标是将过滤后的数据传递到我的 Controller ,然后传递到我的模板。我试过不使用过滤器,一切都按预期工作。即使我什至尝试使用让所有内容通过的过滤器,我也得不到任何数据。我什至尝试使用 false 而不是 true 并摆弄过滤器的参数列表。

我正在使用 ember-data 装置对此进行测试。我遵循命名约定,所以很多工作都是在后台为我完成的。不过这一切似乎都有效(否则第一个示例也应该有问题)。

有效(到达 Controller 并最终呈现在页面上):

App.DomainDirRoute = Ember.Route.extend({
model: function(params) {
return this.store.find('domain_dir');
}
});

失败( Controller 得到一个空数组):

App.DomainDirRoute = Ember.Route.extend({
model: function(params) {
return this.store.filter('domain_dir', function(item){
return true;
});
}
});

更新(尝试 1):

好的,所以我根据 Sam Selikoff 的回答尝试了一些方法。我在 Controller 中定义了 4 个属性(2 个过滤器、一个 map 、一个普通副本)并尝试在模型页面中显示每个属性。只有属性 copyDomain 给出了结果。

Controller 中的属性:

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>

最佳答案

过滤通常在 Controller /组件级别完成。 store.find 发出 AJAX 请求。您的目标是只从服务器检索过滤后的数据子集,还是过滤您在 View 层已有的数据?

通常,如果您只想进行一些实时过滤,您将在 Controller 中进行。将模型 Hook 保留为 this.store.find('domain_dir') 并在 Controller 中添加过滤器:

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}}
...

关于javascript - 过滤器的 Ember.js 路由问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29282483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com