将动态变量添加到Ember适配器?

时间:2018-08-28 05:17:05

标签: javascript ember.js

遇到了我一直在努力解决的EmberJS问题,希望有人能对此有所帮助。

我有一个具有2个主要根路径的应用程序-一个用于租户,一个用于内部管理员。

我正在Ember中设置单独的适配器,以处理不同的命名空间,路径。问题是,主要租户路由在分支到特定资源之前会包含一个租户的ID,因此我希望将该ID包含在适配器的路径中,但是无论如何尝试,我似乎都无法当我在适配器中定义ID时,让Ember识别ID。

内部管理适配器没有此问题,因为资源分支之前的路径是静态的。

这是我拥有的适配器:

import Ember from 'ember';
import { pluralize } from 'ember-inflector';
import { underscore } from 'ember-string';
import config from 'config/environment';
import DS from 'ember-data';
import ENV from 'config/environment';



export default DS.JSONAPIAdapter.extend({
  auth: Ember.inject.service('auth'),

  headers: Ember.computed('auth.authToken', function() {
    return {
      "Authorization": `Bearer ${this.get("auth").getAuthToken('user')}`,
    };
  }), 

  host: config.apiHost,
  namespace: ENV.version,

  pathForType: function(type) {
    var underscored = underscore(type);
    return pluralize(underscored);
  },

});

我想拥有的东西更多:

ENV.version + '/tenant/' + :tenant_id + '/',

但是我似乎无法正常工作。我有一项服务,可以从app_root/services/auth.js中获取租户ID。看起来像这样:

import Ember from 'ember';

export default Ember.Service.extend({
    getTenantId(){
        return '1234';
    },
});

我可以将服务导入适配器吗?我尝试在适配器中创建一个函数,该函数将调用此服务并从中返回值,但是每次都会失败。我也尝试导入服务,但是也失败了。 我想知道是否甚至可以在Ember适配器中添加动态段?如果是这样,如何使其工作?

预先感谢

1 个答案:

答案 0 :(得分:2)

您已经在此适配器中使用了服务。

您是否尝试过类似的方法:

({auth可能是一个非常普通的名称,已经在其他软件包中存在,因此更喜欢使用“个人”名称,这里=>“ tenant”)

app_root/services/tenant.js

import Ember from 'ember';

export default Ember.Service.extend({
    getTenantId(){
        return '1234';
    },
});

和您的适配器:

import Ember from 'ember';
import { pluralize } from 'ember-inflector';
import { underscore } from 'ember-string';
import config from 'config/environment';
import DS from 'ember-data';
import ENV from 'config/environment';



export default DS.JSONAPIAdapter.extend({
  tenant: Ember.inject.service(),
  // ...


  namespace: computed(/*'tenant.id'*/, function() {
    return `${ENV.version}/tenant/${this.get('tenant').getTenantId()}/`;
  }),

  // ...
});

PS:如果将服务my_service导入键my_service中,则无需指定服务名称:

tenant: Ember.inject.service()
// is equivalent to
tenant: Ember.inject.service('tenant')

// while
my_tenant_service: Ember.inject.service('tenant') // import 'tenant' service into 'my_tenant_service' key
// isn't equivalent to
my_tenant_service: Ember.inject.service() // import 'my_tenant_service' service into 'my_tenant_service' key