繁体   English   中英

向 Ember 适配器添加动态变量?

[英]Adding a dynamic variable to an Ember adapter?

有一个 EmberJS 问题,我一直在努力解决我希望有人能解释一下。

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

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

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

这是我的适配器:

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 的app_root/services/auth.js 它看起来像:

import Ember from 'ember';

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

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

提前致谢,

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

你有没有尝试过这样的事情:

auth可能是一个很常见的名字,已经存在于其他一些包中,所以更喜欢一个更“个人”的名字,这里=>“租户”)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM