在路由器中过滤ember模型

jdo*_*116 1 model store filter ember.js

我正在尝试将模型存储库返回到我的模板中,但在返回之前,我希望按特定属性进行过滤,仅返回具有该属性的记录.另外,在我的模型中,我用序列化器覆盖了默认的'id'.

在我的控制台中,我得到一个"商店未定义ReferenceError:商店未定义"任何想法?

这是我的路线:

import Ember from 'ember';
import DS from 'ember-data';

export default Ember.Route.extend({

    model: function() {

    return this.store.find('link').then(function(links) {
        return store.filter('link', { linkTypeCode: 'NSL' });

    });

    }

});
Run Code Online (Sandbox Code Playgroud)

模型:

import DS from 'ember-data';

export default DS.Model.extend({
    artifactId : DS.attr('number'),
    artifactName : DS.attr('string'),
    linkTypeCode : DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)

run*_*red 8

你的路线是打电话store而不是this.store.由于这是在异步回调中,this.store因此还需要将其缓存到变量中.

此外,一旦您解决此问题,您将遇到过滤器错误.过滤器需要一个功能.

import Ember from 'ember';
import DS from 'ember-data';

export default Ember.Route.extend({

  model: function() {
    var Store = this.store;

    return Store.find('link').then(function(links) {
      return Store.filter('link', function (record) { 
        return record.get('linkTypeCode') === 'NSL'; 
      });
    });
  }

});
Run Code Online (Sandbox Code Playgroud)

我还要注意DS.filter返回一个实时记录数组,这意味着它的记录总是与商店学到的记录保持同步.可以执行以下操作.

Store.find('link');
return Store.filter('link', function (record) {
  return record.get('linkTypeCode') === 'NSL';
});
Run Code Online (Sandbox Code Playgroud)

  • 这个答案,特别是底部的片段,值得更多的赞成. (2认同)