【发布时间】:2015-07-10 09:24:27
【问题描述】:
我意识到这个问题之前已经提出过,如果 Template.dynamic 的模板参数是帮助器,则它的设计并不是为了接收参数。
但这是我想做的:
// a global helper that composites the template's name using domain-specific and global parameters
Template.registerHelper('templateName', function (name) {
return name + Session.get('someVariable');
});
<!-- use case: a template calling two dynamic ones -->
<template name="someTemplate">
<div class="some-class">
{{> Template.dynamic template=templateName 'title' }}
</div>
<div class="another-class">
{{> Template.dynamic template=templateName 'content' }}
</div>
</template>
这种模式非常 DRY,它避免了设置嵌套条件和重写准相同的模板,每个模板都只需要很少的更改。
现在,我有这个:
Template.registerHelper('templateName', function () {
var dt = this.dName || Template.parentData().dName;
return dName + Session.get('someVariable'));
});
<template name="someTemplate">
{{> segment dName="title"}}
{{> segment dName="content"}}
</template>
<template name="segment">
<div class="some-class">
{{> Template.dynamic template=templateName }}
</div>
</template>
它有效,但并不理想,因为;
- 容易混淆的需要在父模板的调用中包含动态模板名称的参数
- 由于一个参数,每个模板只允许使用一个
Template.dynamic,这会导致可伸缩性问题 - 将
dName参数放在模板的数据上下文中会与本地数据混合在一起,需要检查它是否可以在当前或父级中访问 - DOM 中的任何进一步复杂性都需要大量嵌套的参数条件或许多略有不同的静态模板,从而导致膨胀
是否有计划添加此功能?我会以错误的方式解决这个问题吗?有没有其他人遇到过这些问题?
感谢阅读。
【问题讨论】:
标签: javascript meteor meteor-blaze