在 ember 1.10.0 中直接使用 Ember.Handlebars.helpers.view 访问视图助手
Access view helper directly with Ember.Handlebars.helpers.view in ember 1.10.0
此代码适用于 ember 1.7.0:
var ViewTemplateHelper = Ember.Handlebars.makeBoundHelper(function(templateString, options) {
var dummy = Ember.View.extend({
classNames: ['view-template'],
template: Ember.Handlebars.compile(templateString)
});
var view = dummy.create();
if (options && options.hash) {
options.hash.content = template;
}
// Hack to prevent appendChild error
if (options.data.view._state === 'inDOM') {
options.data.view.rerender();
options.data.view.renderToBuffer();
}
return Ember.Handlebars.helpers.view.call(this, view, options); // undefined is not a function
});
export
default ViewTemplateHelper;
但现在 ember 1.10.0 给出了 undefined is not a function
错误。
我尝试使用 Ember.Handlebars.helpers.view.helperFunction.call
。
我错过了什么?
这个问题的解决方案不是在帮助程序中,而是使用组件。
// components/content-element.js
import Ember from 'ember';
export
default Ember.Component.extend({
updateLayout: function() {
var store = this.container.lookup('store:main');
var projectId = this.get('project.id');
store.find('contentElement', {
key: this.get('key'),
project_id: projectId
}).then(function(contentElement) {
if (!Ember.isEmpty(contentElement.get('firstObject.value'))) {
var template = contentElement.get('firstObject.value');
var compiled = Ember.Handlebars.compile(template);
this.set('layout', compiled);
this.rerender();
}
}.bind(this));
}.observes('key').on('init')
});
我们使用模型 contentElement
作为我们的模板。将布局设置为已编译的 Handlebars 后,您必须 运行 this.rerender();
对于组件,您必须像这样绑定所有要使用的变量:
{{content-element key="name.of.element" project=project}}
在这种情况下,我们在动态模板中使用 project
,因此我们绑定了它。 key
用于从商店中获取正确的 contentElement
。
此代码适用于 ember 1.7.0:
var ViewTemplateHelper = Ember.Handlebars.makeBoundHelper(function(templateString, options) {
var dummy = Ember.View.extend({
classNames: ['view-template'],
template: Ember.Handlebars.compile(templateString)
});
var view = dummy.create();
if (options && options.hash) {
options.hash.content = template;
}
// Hack to prevent appendChild error
if (options.data.view._state === 'inDOM') {
options.data.view.rerender();
options.data.view.renderToBuffer();
}
return Ember.Handlebars.helpers.view.call(this, view, options); // undefined is not a function
});
export
default ViewTemplateHelper;
但现在 ember 1.10.0 给出了 undefined is not a function
错误。
我尝试使用 Ember.Handlebars.helpers.view.helperFunction.call
。
我错过了什么?
这个问题的解决方案不是在帮助程序中,而是使用组件。
// components/content-element.js
import Ember from 'ember';
export
default Ember.Component.extend({
updateLayout: function() {
var store = this.container.lookup('store:main');
var projectId = this.get('project.id');
store.find('contentElement', {
key: this.get('key'),
project_id: projectId
}).then(function(contentElement) {
if (!Ember.isEmpty(contentElement.get('firstObject.value'))) {
var template = contentElement.get('firstObject.value');
var compiled = Ember.Handlebars.compile(template);
this.set('layout', compiled);
this.rerender();
}
}.bind(this));
}.observes('key').on('init')
});
我们使用模型 contentElement
作为我们的模板。将布局设置为已编译的 Handlebars 后,您必须 运行 this.rerender();
对于组件,您必须像这样绑定所有要使用的变量:
{{content-element key="name.of.element" project=project}}
在这种情况下,我们在动态模板中使用 project
,因此我们绑定了它。 key
用于从商店中获取正确的 contentElement
。