Javascript 将Ember属性的花括号渲染为手柄分隔符
我的控制器中有以下属性:Javascript 将Ember属性的花括号渲染为手柄分隔符,javascript,ember.js,handlebars.js,Javascript,Ember.js,Handlebars.js,我的控制器中有以下属性: panelTemplate: '<ul><li>Components:</li><li>{{multi-input-comp}}</li><li>{{modal-dialog-comp}}</li><li>End</li></ul>' panelTemplate:“组件:{{multi-input comp}}{{modal dialog comp}
panelTemplate: '<ul><li>Components:</li><li>{{multi-input-comp}}</li><li>{{modal-dialog-comp}}</li><li>End</li></ul>'
panelTemplate:“- 组件:
- {{multi-input comp}}
- {{modal dialog comp}}
- 结束
在与控制器对应的模板中,我希望两个组件(多输入组件和模态对话框组件)显示在列表中
但是在.hbs中写入{{{panelTemplate}}
将显示以下内容:
- 组成部分:
- {{multi-input comp}}
- {{modal dialog comp}}
- 结束
从属性中移除花括号,并使用组件辅助对象渲染组件:
{{component componentName}}
有关component helper的更多信息,请查看ember文档:,毕竟,我找到了一个解决方案:
//app/components/panel.js
panelTemplate: '<ul><li>Components:</li><li>{{multi-input-comp key="E-mails"}}</li><li>{{partial-test}}</li><li>End</li></ul>',
templateName: "temp-panel" //make sure it does not contain an upper case character
//app/templates/components/panel.hbs
{{partial (render-template panelTemplate templateName)}}
//app/helpers/render-template.js
import Ember from 'ember';
export function renderTemplate(params/*, hash*/) {
var obj= params[0];
var panel = params[1];
var htmlContent = Ember.HTMLBars.compile(obj);
Ember.TEMPLATES[panel] = htmlContent;
var template = Ember.TEMPLATES[panel];
return panel;
}
export default Ember.Helper.helper(renderTemplate);
//app/components/panel.js
panelTemplate:“- 组件:
- {{multi-input comp key=“E-mail”}}
- {{partial test}}}
- 结束
”,
templateName:“临时面板”//确保它不包含大写字符
//app/templates/components/panel.hbs
{{partial(呈现模板panelTemplate templateName)}
//app/helpers/render-template.js
从“余烬”导入余烬;
导出函数renderTemplate(params/*,hash*/){
var obj=参数[0];
var面板=参数[1];
var htmlContent=Ember.htmlbar.compile(obj);
Ember.TEMPLATES[panel]=htmlContent;
var-template=Ember.TEMPLATES[panel];
返回面板;
}
导出默认的Ember.Helper.Helper(renderTemplate);
更改属性名称如果不深入到余烬核心本身,您就无法做到这一点。@Lux:是的,看来我必须这样做,或者可能会改变我遵循的整个概念。顺便说一句,这是实际例子的问题,因为在这个问题中,我给出了一个过于简化的例子,这造成了一个误解。@userGS这个属性是从哪里得到的?你不能用手柄代替包含属性的html吗?你可以让它动态。您可以拥有一个数组组件:['multi-input-comp','modal-dialog-comp']
,然后在把手{{{{{{35;每个组件作为{c}}}{{component c}{{/each}}
中对其进行循环。您甚至可以构建自己的元语言,包含组件和纯文本部分,如果要使用组件帮助器或仅显示内容,您可以使用手柄。谢谢您的回复。这个答案适用于我给出的例子。我试图使属性尽可能简单,但实际上,我正在处理的属性有点复杂。事实上,我有一个包含多个组件和html标记的面板。我会编辑它使它更具体。好吧,你可以让你的财产变得尽可能复杂。它可以是一个计算属性,可以做很多事情,但最终你只需要一个字符串,它是你想要呈现的组件的名称。由于某种原因,我无法编辑它。这是模板中的属性:panelContent:“- {{component1 name}{{component2 name}”。hbs我想这样称呼它{{panelContent},而不是
- {component1 name}{li>{component2 name}li>{li>{component2 name}”