如何覆盖 Ember 数据中的 peek 方法?

How to override peek method in Ember data?

我的应用程序在 users.js 模型中有用户(包括活动用户和已删除用户)。

但早些时候它只有活跃用户。所以,如果我将删除添加到同一模型,那么它会影响我不需要删除用户的其他地方,这导致我在很多地方进行更改。

所以,我想覆盖 ember-data 中的 peekAll 以从用户模型中获取所需数据。

像这样:

App.ApplicationAdapter = DS.RESTAdapter.extend({
    peek: () {
        //...
    }
});

但是ember-data docs中没有这样的东西。

有什么方法可以覆盖 peekAll 方法吗?

不要覆盖 peekAll 方法。我建议使用 filterBy 使用 isDeleted 标志。

let users = this.get('store').peekAll('user');
activeUsers = users.filterBy('isDeleted',false);

http://emberjs.com/api/data/classes/DS.Model.html#property_isDeleted

编辑:您可以将服务器返回的 isDeleted 键映射到模型中的其他名称。 为此,您需要通过 运行 ember g serializer user

user 模型创建序列化程序

app/models/user.js

import DS from 'ember-data';

export default DS.Model.extend({
  isDeletedFlag: DS.attr('string')
});

app/serializers/user.js

import DS from 'ember-data';

export default DS.JSONAPISerializer.extend({
  attrs: {
    isDeletedFlag: 'isDeleted'
  }
});

https://guides.emberjs.com/v2.11.0/models/customizing-serializers/#toc_attribute-names

编辑:这个小游戏只适合你。我不会向其他人推荐这个,因为这可能会在未来的升级中产生问题。 Ember-Twiddle 覆盖 peekAll 方法并执行您需要的操作

我推荐 kumkanillam 所说的。但是要回答你的问题,你可以通过为你的用户模型创建一个适配器来覆盖 peekAll 方法

adapters/users.js

App.ApplicationAdapter = DS.RESTAdapter.extend({
   peekAll: () {
       //...
   }
});