【问题标题】:How to override peek method in Ember data?如何覆盖 Ember 数据中的 peek 方法?
【发布时间】:2017-03-10 05:25:04
【问题描述】:

我的应用程序在 users.js 模型中有用户(活跃和已删除)的场景。

但之前它只有活跃用户。所以,如果我在同一个模型中添加删除,那么它会影响我不需要删除用户的其他地方,并导致我在很多地方进行更改。

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

类似的东西:

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

但是在 ember-data 文档中没有这样的东西。

有没有办法覆盖 peekAll 方法?

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    不要覆盖 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 键映射到模型中的其他名称。 为此,您需要为 user 模型创建序列化程序,方法是运行 ember g serializer 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 方法并执行您需要的操作

    【讨论】:

    • 我知道这一点,但这会导致很多变化,因为我正在处理一个繁重的应用程序。
    • 那么你将要覆盖 store.js 的内部私有方法。 github.com/emberjs/data/blob/v2.11.0/addon/-private/system/… 。我会说这不是正确的方法。海事组织
    • 从后端,我得到一个名为 isDeleted true 的标志,它是模型的一部分,表示用户已被删除。但是名为 isDeleted 的 ember 模型属性将从本地模型中删除数据。这是我不想要的。
    • 更新:我从后端得到的标志是 deleted: true。但是从这个讨论中,我可以发现处理这种情况的唯一方法是根据标志删除过滤数据。即使覆盖 peekAll 也不起作用。
    • 用您真正需要的内容更新了我的答案,但我建议在所有必需的地方实现或为用户模型创建序列化程序并实现 normailzeResponse 方法,您可以在其中删除 @ 附带的有效负载987654336@.
    【解决方案2】:

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

    适配器/users.js

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 1970-01-01
      • 2014-10-19
      相关资源
      最近更新 更多