我有这个:
export function initialize(container, application) {
application.inject('component', 'store', 'store:main');
application.inject('component', 'application', 'application:main');
application.inject('component', 'applicationController', 'controller:application');
application.inject('helper', 'applicationController', 'controller:application');
application.inject('model:device', 'application', 'application:main');
application.inject('model:room', 'application', 'application:main');
application.inject('model:setting', 'application', 'application:main');
application.inject('route:application', 'application', 'application:main');
application.inject('transform', 'application', 'application:main');
}
export default {
name: 'injections',
initialize: initialize
};
注意:
application.inject('helper', 'applicationController', 'controller:application');
但是在帮助器中, this.get('applicationController')
没有定义:
import Ember from 'ember';
import environment from '../utils/environment';
export function staticImg(path, options) {
if (path) {
var staticRoot = this.get('applicationController').get('model.staticRoot');
return new Ember.Handlebars.SafeString('<img src="' + environment.staticHost() + staticRoot + path + '" class="' + ( options.hash.classNames || "" ) + '">');
}
else {
return "";
}
}
export default Ember.Handlebars.makeBoundHelper(staticImg);
在文档中它说你可以注入到助手上,这个确切的设置适用于其他框架类,但不是在这里......
你不能注入助手。 我相信文档已更新,但请指出您注意到它提到这是可能的地方,以便我们可以修复文档...
糟糕,你确实为 1.11 更新了它们。 谢谢。 好的,那么如果我们需要从助手内部访问容器内容,特别是普通的 Ember.Object 实例(没有容器属性),我们应该走的方向是什么?
@atomkirk而不是尝试将某些东西注入到助手中,您应该注入控制器/组件并将注入的对象传递给助手(或仅使用计算属性)。 或者只是使用组件而不是助手。
如果我在组件内部使用 helper 并且我也需要访问用户数据,我通常会注入路由和控制器怎么办? 在该助手内部无法访问它。
将它传递给每个组件似乎效率不高,我需要为每个组件创建例如 user.name,而对于所有组件都是相同的。 因此,如果我有 50 个组件,我需要将相同的值传递给 50 个组件才能从组件内部的帮助程序访问它...
有什么办法解决这个问题吗?
这已在 Ember.js 1.13 中通过关闭操作解决。 请参见:
对于稍后遇到此问题的任何人,Ember 2.x 中的助手现在是“真实”对象并且可以访问服务(通过Ember.inject.service
或基于初始化程序的注入)。
例子:
export default Ember.Helper.extend({
i18n: Ember.inject.service('i18n'),
compute(params, hash) {
let i18n = this.get('i18n');
// stuff here
}
});
最有用的评论
对于稍后遇到此问题的任何人,Ember 2.x 中的助手现在是“真实”对象并且可以访问服务(通过
Ember.inject.service
或基于初始化程序的注入)。例子: