Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有筛选器的Ember.js路由问题_Javascript_Ember.js_Ember Data - Fatal编程技术网

Javascript 带有筛选器的Ember.js路由问题

Javascript 带有筛选器的Ember.js路由问题,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我的目标是将过滤后的数据传递给我的控制器,然后传递给我的模板。我试着不使用过滤器,一切正常。如果我甚至尝试使用一个过滤器,让一切通过,我不会得到任何数据。我甚至尝试过使用false而不是true,并摆弄过滤器的参数列表 我正在使用余烬数据装置来测试这一点。我遵循命名惯例,所以很多工作都是在幕后为我做的。但这一切似乎都在起作用(否则第一个示例也会有问题) 工作(到达控制器并最终在页面上呈现): 失败(控制器获取空阵列): 更新(尝试1): 好吧,我根据Sam Selikoff的答案做了一些尝试。我

我的目标是将过滤后的数据传递给我的控制器,然后传递给我的模板。我试着不使用过滤器,一切正常。如果我甚至尝试使用一个过滤器,让一切通过,我不会得到任何数据。我甚至尝试过使用false而不是true,并摆弄过滤器的参数列表

我正在使用余烬数据装置来测试这一点。我遵循命名惯例,所以很多工作都是在幕后为我做的。但这一切似乎都在起作用(否则第一个示例也会有问题)

工作(到达控制器并最终在页面上呈现):

失败(控制器获取空阵列):

更新(尝试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')
App.DomainDirController = Ember.Controller.extend({
  filteredDomains: function() {
    return this.get("model").filterBy('someProp', true);
  }.property('model.@each.someProp')
});
模型:

        <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.filteredomans中的每个domainDir}
  • domainDir.domain
  • {{/每个}}
  • 过滤器维护2
  • {{{#controller.filteredodomains2}中的每个domainDir
  • domainDir.domain
  • {{/每个}}
  • 大写域
  • {{{#controller.upperCaseDomains中的每个domainDir}
  • domainDir.domain
  • {{/每个}}
  • 复制域
  • {{{#controller.copyDomains中的每个domainDir}
  • domainDir.domain
  • {{/每个}}

过滤通常在控制器/组件级别完成
store.find
发出AJAX请求。您的目标是仅从服务器检索已过滤的数据子集,还是过滤视图层中已有的数据

通常,如果您只是想进行一些实时过滤,您可以在控制器中进行。将模型挂钩保留为
this.store.find('domain\u dir')
并在控制器中添加过滤器:

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')
App.DomainDirController = Ember.Controller.extend({
  filteredDomains: function() {
    return this.get("model").filterBy('someProp', true);
  }.property('model.@each.someProp')
});
您还应该查看一些速记:

App.DomainDirController = Ember.Controller.extend({
  filteredDomains: Ember.computed.filterBy('model', 'someProp');
});
现在在模板中,您可以执行以下操作

{{#each domain in filteredDomains}}
  ...

事实上,我真的不知道该把过滤放在哪里,所以非常感谢你的建议。我试过你的解决办法,但还是遇到了问题。我已经用我尝试过的方法和结果更新了我的问题。现在,我可以通过修改copyDomains属性来绕过这个问题(通过所有步骤),但我更喜欢使用Ember方法。这个解决方案对我来说很有效,但我真的很困惑为什么它会首先发生。我想,
Ember.Route#模型
可以满足任何承诺。。。