gpt4 book ai didi

javascript - Ember-data 通过 id 和其他参数查找记录?

转载 作者:数据小太阳 更新时间:2023-10-29 03:53:01 25 4
gpt4 key购买 nike

在 Ember 文档中我发现 find() 支持通过 id 查找:

this.store.find('post', 1); // => GET /posts/1

也可以通过传递任意参数:

this.store.find('post', { name: "Peter" }); // => GET to /posts?name='Peter'

但在我的例子中,我必须通过 id 查找,并传递一个额外的参数来请求所有字段都包含在响应中(默认情况下省略一些字段),如下所示:

this.store.find('post', 1); // => GET /posts/1?include=all

我试过这样做:

this.get('store').find('post', params.post_id, { include : 'all' });

但是我的参数被忽略了。

这似乎是一个相当基本的用例,所以我一定遗漏了一些东西......

我怎样才能做到这一点?

最佳答案

您现在可能已经找到了解决该问题的方法,但解决方法是在 options 参数上使用 adapterOptions

那么,让我们开始吧

  1. 在获取模型(即路线)的位置,设置所需的自定义参数。在您的情况下,包括。它是这样的:

    //file app/routes/post/edit.js

    import Ember from 'ember';

    export default Ember.Route.extend({
    model: function(params) {
    return this.store.findRecord('post', params.post_id, {
    adapterOptions: { include: 'all' }
    });
    }
    });
  2. 在模型的适配器中读取此值以自定义 ajax 请求:

    //file app/adapters/post.js

    export default JSONAPIAdapter.extend({
    findRecord: function(store, type, id, snapshot) {
    if (Em.get(snapshot, 'include')) {
    let url = this.buildURL(type.modelName, id, snapshot, 'findRecord');
    let query = this.buildQuery(snapshot);
    return this.ajax(url, 'GET', { data: query });
    } else {
    this._super(...arguments);
    }
    });

更新 1:

在 ember-data 较新版本 (>= 2.4.0) 上,您可以开箱即用,通过调用store.findRecord('post', {include: 'all'});

关于javascript - Ember-data 通过 id 和其他参数查找记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24746006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com