【问题标题】:Meteor.js: how to pass the data context of one helper to another helper?Meteor.js:如何将一个助手的数据上下文传递给另一个助手?
【发布时间】:2013-09-30 00:46:39
【问题描述】:

所以如果我有一个模板:

<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}} 可能是正确的方法,但这似乎只有在第二个模板的范围已经在第一个模板内时才有效。

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

【问题讨论】:

    标签: javascript coffeescript meteor handlebars.js


    【解决方案1】:

    您似乎在问以下两个问题之一:

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

      <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 告诉它不要转义模板。

    【讨论】:

    • 您的回答是 100% 正确的,但我的措辞很差,而且不是我想要的。我不知道您是否使用过 iron-router,但您可以做的一件事是通过 data:... 传递数据上下文。我想将主模板的数据上下文传递到标题模板中。有没有办法将与单个模板关联的所有帮助器放入单个对象并传递它?也许 data: Template.myTemplate.helpers() 或类似的东西。 (无论如何我都会给你答案,只是好奇)
    • 数据上下文与模板助手不同。如果您想使用帮助器,您应该手动收集它们,因为Template.myTemplate 附加了一堆您不想传递的其他东西。您可以将帮助器和数据作为对象传递给您想要的任何东西,但请注意不要混淆自己。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 2016-09-02
    • 2013-06-18
    • 1970-01-01
    • 2014-12-12
    • 2019-04-07
    相关资源
    最近更新 更多