在路由器中过滤ember模型 [英] Filtering ember model in router

查看:167
本文介绍了在路由器中过滤ember模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图将模型商店返回到我的模板,但在我返回之前,我想通过某个属性过滤,只返回那些具有该属性的记录。此外,在我的模型中,我用一个序列化程序覆盖了默认的id。

I'm trying to return the model store into my template but before I do the return I would like to filter by a certain property, returning only those records that have that property. Also, in my model, I'm overriding the default 'id' with a serializer.

在我的控制台我得到一个商店没有定义ReferenceError:商店没有定义任何想法?

In my console I'm getting a "store is not defined ReferenceError: store is not defined" Any ideas ?

这是我的路线:

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' });

    });

    }

});

型号:

import DS from 'ember-data';

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


推荐答案

您的路线正在呼叫 而不是 this.store 。由于这是异步回调,所以 this.store 也需要被缓存到变量中。

Your route is calling store instead of this.store. Since this is within an asynchronous callback, this.store will also need to have been cached to a variable.

另外,一旦你解决这个问题,你会遇到你的过滤器的错误。过滤器需要一个函数。

Additionally, once you fix this you will encounter an error with your filter. The filter expects a function.

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'; 
      });
    });
  }

});

我还会注意到 DS.filter 返回一个实时记录数组,这意味着记录始终保持最新与商店记录的记录。可以执行以下操作。

I would also note that DS.filter returns a live record array, meaning it's records are always kept up-to-date with the records the store learns about. It would be possible to do the following.

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

这篇关于在路由器中过滤ember模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆