4

随着流星更新到 0.8,我的旧代码停止工作。

Handlebars.registerHelper('getTemplate', function(id, context) {
    return Template[id](context);
}); 

<template name="main">
    ....
    {{{getTemplate templateName context}}}
    ....
</template>

//somewhere in other template 
Template.main.context = {name:value};

通过这种方式,我能够使用自定义数据呈现自定义模板。现在我找不到传递context给动态模板的方法。与 blazetemplateNamecontext没有定义。有什么建议吗?

4

2 回答 2

2

流星 >= 0.8.2

您可以使用UI.dynamic帮助程序呈现具有动态指定的上下文的模板。有关更多详细信息,请查看此问题

流星 < 0.8.2

这两个问题都在流星维基的这个页面上得到解决。

  1. Handlebars.registerHelper现在在这里UI.registerHelper看到。

  2. 此处显示了如何动态呈现模板的示例。


更新

实际上,鉴于要求,解决方案对我来说似乎不是很明显。如果您愿意使用会话变量来设置模板名称和上下文,并且您的主模板中只有一个动态模板。你可以这样做:

<body>
  {{> main}}
</body>

<template name="main">
  {{> getTemplate context}}
</template>

<template name="dogs">
  <p>There are {{animals}} dogs!</p>
</template>

<template name="cats">
  <p>There are {{animals}} cats!</p>
</template>
Session.setDefault('templateName', 'dogs');
Session.setDefault('templateContext', {animals: 10});

Template.main.getTemplate = function() {
  return Template[Session.get('templateName')];
};

Template.main.context = function() {
  return Session.get('templateContext');
};
于 2014-04-08T06:00:17.787 回答
1

这是在流星核心列表中提出的, @dgreensp,在 Blaze 上工作的 MDG 核心开发人员,打开了Ticket #2007 - How to render a template to HTML with data所以他们肯定知道这一点,我希望能得到修复0.8.0 之后不久。

他还包括以下解决方法:

var toHTMLWithData = function (kind, data) {
  return UI.toHTML(kind.extend({data: function () { return data; }}));
};

github 票有进一步的讨论和替代代码片段,您可能会发现它们很有用。

于 2014-04-09T19:48:52.000 回答