更新到 1.11.1 - 无法在助手内部访问视图

Updating to 1.11.1 - View not accessible inside an helper

我们正在将 ember 应用程序从 1.10 更新到 1.11,我们 运行 遇到了问题。我们有一个简单的 sort-toggle 助手,但它不再工作了。

{{#link-to "foo" (sort-toggle "id")}}

助手代码:

Ember.HTMLBars._registerHelper('sort-toggle', function(params, hash, options, env) {
    var target = this.get('controller.sortTarget') || hash.target,
        view = env.data.view,
        field = params[0];

    hash = {};
    hash[target] = view.getStream(this.get('controller').createToggleString(field));

    options = {
        hash: hash,
        data: options.data
    };

    return Ember.Handlebars.helpers['query-params'].helperFunction.call(this, [], hash, options, env);
});

似乎自从我们更新到 ember-cli 0.2.3 (ember 1.11.1) 以来,这现在是未定义的,因此我们无法访问视图或控制器。

我们在更新日志中没有看到与此相关的任何内容,发生了什么变化?我们应该如何迁移它?

如果我没记错的话,1.10 -> 1.11 升级也是我的一个客户被封锁了一段时间的地方。 1.11 和 1.12 对助手没有很好的支持,当他们在 1.13 中获得助手的更新版本时,他们的工作方式与以前有很大不同。

此处提供更多详细信息:

  1. https://github.com/emberjs/ember.js/issues/11080
  2. https://github.com/emberjs/rfcs/blob/master/text/0053-helpers.md
  3. https://github.com/mixonic/rfcs/blob/helper-listing/active/0000-helper-listing.md
  4. 1.13 博客 post 中也提到了新助手:http://emberjs.com/blog/2015/06/12/ember-1-13-0-released.html

对于我的客户,我们不得不跳转到 1.13.3(我相信),因为 ember-canember-i18n 都受到这些变化的影响,我们非常依赖它们。

希望对您有所帮助!

正如@acorncom 提到的那样,问题是我们使用的是私有 API:_registerHelper

我们暂时设法解决了这个问题,因为在 env.data.view 中仍然可以访问视图,然后控制器只有一个 get() 距离,但这只是一个临时解决方案,我们将尽快重构它。

新代码:

Ember.HTMLBars._registerHelper('sort-toggle', function(params, hash, options, env) {
    var view = env.data.view,
        field = params[0],
    target = view.get('controller.sortTarget') || hash.target;

    hash = {};
  var toggleString = view.get('controller').createToggleString(field);
    hash[target] = view.getStream(toggleString);

    options = {
        hash: hash,
        data: options.data
    };

    return Ember.Handlebars.helpers['query-params'].helperFunction.call(this, [], hash, options, env);
});