2

所以如果我有一个模板:

<template name="myTemplate">
  {{foo}}
</template>

和模板助手:

Template.myTemplate.foo = function() {
   blah = Session.get('blah');
   // code to do stuff with blah
   return blah;
};

然后我有另一个模板:

<template name="myOtherTemplate">
   {{foo}}
</template>

我希望这个模板的数据上下文与之前的模板相同,我该怎么办?

我第一次想到使用 {{#with}} 可能是正确的方法,但这似乎只有在第二个模板的范围已经在第一个模板内时才有效。

最终,我希望能够在另一个模板中使用为一个模板定义的所有助手,并知道如何做到这一点。

4

1 回答 1

3

好像你在问两个问题之一:

  1. 如果您使用myOtherTemplateinside myTemplate,则另一个模板的上下文将与此相同,除非您明确地将其他内容作为部分的第二个参数传递给它。

    <template name="myTemplate">
      {{> myOtherTemplate foo}}
    </template>
    
  2. 如果您想在多个模板中使用帮助器,请在全局帮助器中声明它。这将{{foo}}在所有模板中可用:

    Handlebars.registerHelper("foo", function() {
       blah = Session.get('blah');
       // code to do stuff with blah
       return blah;
    });
    
  3. 如果您想动态创建自己的数据上下文(这种情况很少见),请执行以下操作:

    <template name="myTemplate">
      {{{customRender}}}
    </template>
    
    Template.myTemplate.customRender = function() {
       return Template.otherTemplate({
           foo: something,
           bar: somethingElse,
           foobar: Template.myTemplate.foo // Pass in the helper with a different name
       });
    };
    

    这个对象基本上就是 Iron-Router 在渲染时传递给你的模板的东西。请注意,您将需要使用三重把手{{{ }}}或使用new Handlebars.SafeString来告诉它不要转义模板。

于 2013-09-24T18:16:56.310 回答