向 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 + '/',
但我似乎无法让它工作。我有一项服务可以从以下位置获取租户 ID:app_root/services/auth.js
。它看起来像:
import Ember from 'ember';
export default Ember.Service.extend({
getTenantId(){
return '1234';
},
});
我可以将服务导入适配器吗?我尝试在适配器中创建一个函数来调用此服务和 return 它的值,但每次都失败。我也尝试导入该服务,但也失败了。
我想知道是否可以在 Ember 适配器中添加动态段?如果可以,如何实现?
提前致谢,
您已经在该适配器中使用了一项服务。
你试过类似的东西吗:
(auth
可能是一个非常常见的名称,已经存在于其他一些包中,所以更喜欢 'personal' 名称,这里 => '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
有一个 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 + '/',
但我似乎无法让它工作。我有一项服务可以从以下位置获取租户 ID:app_root/services/auth.js
。它看起来像:
import Ember from 'ember';
export default Ember.Service.extend({
getTenantId(){
return '1234';
},
});
我可以将服务导入适配器吗?我尝试在适配器中创建一个函数来调用此服务和 return 它的值,但每次都失败。我也尝试导入该服务,但也失败了。 我想知道是否可以在 Ember 适配器中添加动态段?如果可以,如何实现?
提前致谢,
您已经在该适配器中使用了一项服务。
你试过类似的东西吗:
(auth
可能是一个非常常见的名称,已经存在于其他一些包中,所以更喜欢 'personal' 名称,这里 => '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