如何使用变量模板创建可重用的 UI?
How to create reusable UI with variable template?
我想做这样的事情:
组件文件:
<template name="drop_down">
<span class="dropdown">
{{> primary_element}} <--- load the template named button
<span class="dropdown-panel">
{{> panel_template}} <--- load the template named button_panel
</span>
</span>
</template>
用法:
{{> drop_down primary_element="button" panel_template="button_panel"}}
<template name="button"> some styled button </template>
<template name="button_panel"> panel content </template>
然后我可以像这样重复使用它
{{> drop_down primary_element="tmp_btn_2" panel_template="tmp_panel_2"}}
<template name="tmp_btn_2"> another button style </template>
<template name="tmp_panel_2"> other panel content </template>
你应该可以用 dynamic templates 做到这一点。在 blaze 中,您可以传入要用作变量的模板,以及数据上下文本身。它们非常灵活。
例如:
{{> Template.dynamic template=whichTemplate data=myData }}
这将引用 whichTemplate
帮助程序来确定要使用的模板,并从 myData
帮助程序获取数据上下文。即模板的选择和数据的选择都来自variables.
在您的情况下,您正试图在 dropdown
模板的上下文中使用两个动态模板。你可以这样做:
<template name="drop_down">
{{#with myElements}}
<span class="dropdown">
{{> Template.dynamic template=this.primary}}
<span class="dropdown-panel">
{{> Template.dynamic template=this.panel}}
</span>
</span>
{{/with}}
</template
然后您的 myElements
助手只需要 return 模板的名称以用作 strings,例如:
Template.dropdown.helpers({
myElements() {
let p1 = "button"; // compute these two based on your own logic
let p2 = "button_panel";
return {primary: p1, panel: p2 };
}
});
我想做这样的事情:
组件文件:
<template name="drop_down">
<span class="dropdown">
{{> primary_element}} <--- load the template named button
<span class="dropdown-panel">
{{> panel_template}} <--- load the template named button_panel
</span>
</span>
</template>
用法:
{{> drop_down primary_element="button" panel_template="button_panel"}}
<template name="button"> some styled button </template>
<template name="button_panel"> panel content </template>
然后我可以像这样重复使用它
{{> drop_down primary_element="tmp_btn_2" panel_template="tmp_panel_2"}}
<template name="tmp_btn_2"> another button style </template>
<template name="tmp_panel_2"> other panel content </template>
你应该可以用 dynamic templates 做到这一点。在 blaze 中,您可以传入要用作变量的模板,以及数据上下文本身。它们非常灵活。
例如:
{{> Template.dynamic template=whichTemplate data=myData }}
这将引用 whichTemplate
帮助程序来确定要使用的模板,并从 myData
帮助程序获取数据上下文。即模板的选择和数据的选择都来自variables.
在您的情况下,您正试图在 dropdown
模板的上下文中使用两个动态模板。你可以这样做:
<template name="drop_down">
{{#with myElements}}
<span class="dropdown">
{{> Template.dynamic template=this.primary}}
<span class="dropdown-panel">
{{> Template.dynamic template=this.panel}}
</span>
</span>
{{/with}}
</template
然后您的 myElements
助手只需要 return 模板的名称以用作 strings,例如:
Template.dropdown.helpers({
myElements() {
let p1 = "button"; // compute these two based on your own logic
let p2 = "button_panel";
return {primary: p1, panel: p2 };
}
});