我的问题与this answer基本相同,但我无法使用ember 1.7.0和&烬-CLI。
我的模型中有widget
属性,在我的模板中我希望有类似的内容:
{{#each question in questions}}
{{#with question}}
<label>{{title}}</label>
{{render-component widget params=params}}
{{/with}}
{{/each}}
一个看起来像的问题模型:
{ id: 6,
title: "Is this a yes/no situation?",
help_text: 'Pick an option',
widget: 'yes-no',
params:
{
yes: {
text: 'You picked yes',
class: 'success'
},
no: {
text: 'Be careful, you picked no',
class: 'danger'
}
}
}
我创建了一个render-component
帮助程序,其中包含以下内容:
import Ember from 'ember';
function renderComponent(componentPath, options) {
console.log('inside helper with comp=' + componentPath + ', opts=' + options);
var component = Ember.Handlebars.get(this, componentPath, options);
var helper = Ember.Handlebars.resolveHelper(options.data.view.container, component);
return helper.call(this, options);
}
export {
renderComponent
};
export default Ember.Handlebars.makeBoundHelper(renderComponent);
但这不起作用。 component
未定义。 Ember.Handlebars.get的API文档在解释options
参数的内容时非常有用。此外,现在没有在文档中提及resolveHelper
方法,所以我也不知道代码是否已过时。
如何从变量中按名称加载组件?
答案 0 :(得分:4)
这个问题已经过时了。 Ember包含built-in dynamic component helper并且已经很长时间了。
答案 1 :(得分:0)
好的,应该是:
helpers/render-component.js
:
import Ember from 'ember';
function renderComponent(componentPath, options) {
console.log('inside helper with comp=' + componentPath + ', opts=' + options);
var helper = Ember.Handlebars.resolveHelper(options.data.view.container, componentPath);
return helper.call(this, options);
}
export {
renderComponent
};
export default Ember.Handlebars.makeBoundHelper(renderComponent);
使用:
{{render-component widget params=params}}
答案 2 :(得分:0)