在Meteor的动态模板

时间:2015-04-30 15:26:08

标签: javascript meteor meteor-blaze

我意识到之前已经提到过,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>
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,从而导致可伸缩性问题
  • inherit参数放在模板的数据上下文中与本地数据混合在一起,需要进行hacky检查是否可以在当前数据或父进程中访问< / LI>
  • DOM的任何进一步复杂性都需要大量参数的嵌套条件或许多略有不同的静态模板,导致膨胀

是否有计划添加此功能?我是以错误的方式来做这件事的吗?还有其他人遇到过这些问题吗?

感谢阅读。

1 个答案:

答案 0 :(得分:1)

使用{{with}}执行此操作有一个技巧。见这里:

https://forums.meteor.com/t/pass-argument-to-helper-in-template-dynamic-call/3971