非常确定这是不可能的,但是万一它和我比我聪明的人已经想到了......
我有一系列非常相似的灰尘模板,如:
<div id="some_id" class="inner funform">
<form id="form_id" action="/do/something">
<fieldset class="foo">
<div class="field"><input .../></div>
<div class="field"><input .../></div>
<div class="field"><input .../></div>
</fieldset>
<fieldset class="bar">
<div class="field"><input .../></div>
<div class="field"><input .../></div>
<div class="field"><input .../></div>
</fieldset>
</div>
看起来非常低效,继承机制是通过copypasta。
理想情况下,我想做一些我有模板的事情,例如fieldset.dust:
<fieldset class="{+fieldset_class}">
</fieldset>
...并在顶级模板中多次调用,可能如下所示:
<div id="some_id" class="inner funform">
<form id="form_id" action="/do/something">
<!-- Here's the magic -->
{>"fieldset.dust"/}
{<fieldset_class}fieldset_one{/fieldset_class}
<div class="field"><input/></div>
<div class="field"><input/></div>
<div class="field"><input/></div>
{>"fieldset.dust"/}
{<fieldset_class}fieldset_two{/fieldset_class}
<div class="field"><input/></div>
<div class="field"><input/></div>
<div class="field"><input/></div>
<!-- end magic -->
</form>
</div>
但是,当然这最终会使用fieldset 2的内容渲染fieldset。
我已经尝试过显而易见的但是失败了:
{>"fieldset.dust"}
fieldset content here..
{/"fieldset.dust"}
甚至考虑在模板渲染时通过javascript传递自定义上下文,但这似乎非常难以维护,只是最终渲染模板作为内容传递给另一个模板,我不得不相信这是低效和hacky。
那么有没有办法实现我想要的?或者这是完全错误的方法,并且有更好的方法在尘埃模板中获得DRY?
----更新----
当然,理想情况下,class =“field”div也会通过基本模板呈现,但我希望保持我的示例简单。
答案 0 :(得分:2)
在https://github.com/rragan/dust-motes/tree/master/src/helpers/html/layout中尝试我的@layout帮助器。也可通过npm install dustmotes-layout获得。
我刚刚对它进行了改进,我一直在考虑将参数传递给布局。这使您的案例更容易处理。我试过这个看起来很像你需要的例子:
fieldset.dust
<fieldset class="{name}">
{@layout base="fieldset_body"/}
</fieldset>
fieldset_body.dust
<div class="{bodyClass}"><input></div>
主要模板
{@layout base="fieldset" name="foo" bodyClass="body1"}{/layout}
{@layout base="fieldset" name="bar" bodyClass="body2"}{/layout}
我得到的输出是:
<fieldset class="foo"><div class="body1"><input></div><div class="body1"><input></div></fieldset><fieldset class="bar"><div class="body2"><input></div><div class="body2"><input></div></fieldset>