Ember.js: 注入助手

创建于 2015-05-04  ·  6评论  ·  资料来源: emberjs/ember.js

我有这个:

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);

在文档中它说你可以注入到助手上,这个确切的设置适用于其他框架类,但不是在这里......

最有用的评论

对于稍后遇到此问题的任何人,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
  }
});

所有6条评论

你不能注入助手。 我相信文档已更新,但请指出您注意到它提到这是可能的地方,以便我们可以修复文档...

糟糕,你确实为 1.11 更新了它们。 谢谢。 好的,那么如果我们需要从助手内部访问容器内容,特别是普通的 Ember.Object 实例(没有容器属性),我们应该走的方向是什么?

@atomkirk而不是尝试将某些东西注入到助手中,您应该注入控制器/组件并将注入的对象传递给助手(或仅使用计算属性)。 或者只是使用组件而不是助手。

如果我在组件内部使用 helper 并且我也需要访问用户数据,我通常会注入路由和控制器怎么办? 在该助手内部无法访问它。
将它传递给每个组件似乎效率不高,我需要为每个组件创建例如 user.name,而对于所有组件都是相同的。 因此,如果我有 50 个组件,我需要将相同的值传递给 50 个组件才能从组件内部的帮助程序访问它...
有什么办法解决这个问题吗?

对于稍后遇到此问题的任何人,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
  }
});
此页面是否有帮助?
0 / 5 - 0 等级

相关问题

dfreeman picture dfreeman  ·  4评论

Geokoumpa picture Geokoumpa  ·  3评论

srsgores picture srsgores  ·  3评论

stevesims picture stevesims  ·  3评论

MichalBryxi picture MichalBryxi  ·  3评论