Ember:如何重写/扩展RESTAdapter以使其在网站范围内?

时间:2016-07-09 11:51:33

标签: ajax ember.js cross-domain ember-data adapter

如果我在 app / adapters / application.js

中扩展适配器
let appAdapter = DS.RESTAdapter.extend({
  ajax: function(url, method, hash) {
    hash = hash || {};
    hash.crossDomain = true;
    hash.xhrFields = {
        withCredentials: true
    };
    return this._super(url, method, hash);
  },
});

export default appAdapter.reopen(config.adapterSettings);

它仍然会被我所拥有的特定型号的适配器所取代。

我有一些特定的适配器,例如: app / adapters / testpost.js

export default DS.RESTAdapter.extend(myTemplates, {
  myTemplate: `${host}/${dir}/testpost`,
});

现在为了使其工作,我使用相同的代码扩展了每个代码,例如 app / adapters / testpost.js 成为:

let testpostAdapter = DS.RESTAdapter.extend({
  ajax: function(url, method, hash) {
    hash = hash || {};
    hash.crossDomain = true;
    hash.xhrFields = { 
        withCredentials: true
    };
    return this._super(url, method, hash);
  },
});

export default testpostAdapter.extend(myTemplates, {
  myTemplate: `${host}/${dir}/testpost`,
});

问题: 如何为所有Ember和所有特定适配器一次扩展/重写RESTAdapter。

尝试在 app / app.js 中进行扩展,不会那样工作。

1 个答案:

答案 0 :(得分:1)

不应直接从特定于模型的适配器中的DS.RESTAdapter.派生,而是从您的应用程序适配器派生。所以替换这个:

import DS from 'ember-data';
export default DS.RESTAdapter.extend({...})

在您的模型特定适配器中:

import ApplicationAdapter from './application'; // assuming not in pod structure
export default ApplicationAdapter.extend({...});