更新到 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 中获得助手的更新版本时,他们的工作方式与以前有很大不同。
此处提供更多详细信息:
- https://github.com/emberjs/ember.js/issues/11080
- https://github.com/emberjs/rfcs/blob/master/text/0053-helpers.md
- https://github.com/mixonic/rfcs/blob/helper-listing/active/0000-helper-listing.md
- 1.13 博客 post 中也提到了新助手:http://emberjs.com/blog/2015/06/12/ember-1-13-0-released.html
对于我的客户,我们不得不跳转到 1.13.3(我相信),因为 ember-can
和 ember-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);
});
我们正在将 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 中获得助手的更新版本时,他们的工作方式与以前有很大不同。
此处提供更多详细信息:
- https://github.com/emberjs/ember.js/issues/11080
- https://github.com/emberjs/rfcs/blob/master/text/0053-helpers.md
- https://github.com/mixonic/rfcs/blob/helper-listing/active/0000-helper-listing.md
- 1.13 博客 post 中也提到了新助手:http://emberjs.com/blog/2015/06/12/ember-1-13-0-released.html
对于我的客户,我们不得不跳转到 1.13.3(我相信),因为 ember-can
和 ember-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);
});