【问题标题】:Updating to 1.11.1 - View not accessible inside an helper更新到 1.11.1 - 在帮助程序中无法访问视图
【发布时间】:2017-07-15 14:55:47
【问题描述】:

我们正在将 ember 应用从 1.10 更新到 1.11,但遇到了问题。我们有一个不再工作的简单排序切换助手。

{{#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)后,它现在是未定义的,因此我们无法访问视图或控制器。

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

【问题讨论】:

    标签: ember.js handlebars.js htmlbars


    【解决方案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 博客文章中也提到了新的助手:http://emberjs.com/blog/2015/06/12/ember-1-13-0-released.html

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

    希望有帮助!

    【讨论】:

      【解决方案2】:

      正如@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);
      });
      

      【讨论】:

        猜你喜欢
        • 2011-09-08
        • 2018-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多