Search code examples
ember.jshandlebars.jshtmlbars

Updating to 1.11.1 - View not accessible inside an helper


We are in the process of updating our ember app from 1.10 to 1.11 and we are running into an issue. We have a simple sort-toggle helper that is not working anymore.

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

Code of the helper:

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

It appears that since we updated to ember-cli 0.2.3 (ember 1.11.1), this is now undefined and so we cannot access the view or the controller.

We did not see anything in the changelog related to this, what changed ? and how should we migrate this ?


Solution

  • So as @acorncom mentionned, the problem is that we were using a private API: _registerHelper.

    We managed to get away with this for now since the view is still accessible in env.data.view and then the controller is just one get() away but this is only a temporary solution and we will have to refactor it soon.

    The new code:

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