更新到1.11.1 - 无法在帮助程序

时间:2017-02-24 17:04:46

标签: ember.js handlebars.js htmlbars

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

我们在更改日志中没有看到与此相关的内容,有什么变化?我们应该如何迁移呢?

2 个答案:

答案 0 :(得分:3)

如果我没记错的话,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
  5. 对于我的客户,我们不得不跳转到1.13.3(我相信),因为ember-canember-i18n都受到这些变化的影响,我们非常依赖它们。

    希望有所帮助!

答案 1 :(得分:0)

正如@acorncom所提到的,问题是我们使用的是私有API: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); }); 只有一个$("#StateListCoolBox").autocomplete({ source: StateListCoolBoxTags, focus: function( event, ui ) { $("#StateListCoolBox").val(ui.item.label); return false; }, select: function( event, ui ) { $("#StateListCoolBox").val(ui.item.label); $("#StateListCoolBox-id").val(ui.item.value); return false; } }); ,我们设法现在可以逃脱这一点,但这只是一个临时解决方案,我们将不得不重构很快。

新代码:

function StateListCoolBox_dropDownClick() {
    $("#StateListCoolBox").autocomplete("search", "" );
};