Meteor子模板可以访问父模板助手吗?

时间:2013-02-28 03:50:13

标签: meteor handlebars.js

假设我们有父模板和子模板:

<template name="parent">
  {{> child }}
</template>

<template name="child">
  {{#if show}}
    //Do something
  {{/if}}
</template>

如果我们将'show'分配给父模板:

if (Meteor.isClient){
   Template.parent.show = function(){
     return Session.get('isShowing');
   }
}

子模板是否有办法访问它?

2 个答案:

答案 0 :(得分:8)

修改

你可以制作一个通用的把手助手,这样你就可以在你的html中的任何地方使用Sessions值:

客户端js

Handlebars.registerHelper('session', function(key) {
    return Session.get(key);
});

客户端HTML

<template name="child">
  {{#if session "show"}}
    //Do something
  {{/if}}
</template>

同样,您也可以在父模板中使用{{session "show"}} / {{#if session "show"}},而不必再使用Template.parent.show助手。

关于../符号的使用。在某些情况下,它可能无效:https://github.com/meteor/meteor/issues/563。基本上它可以在{{#block helpers}}中使用,但不能在模板中使用,但如果它包含子模板,它将在块助手中工作。

<template name="child">
    {{#if ../show}}
       Do something
    {{/if}}
</template>

答案 1 :(得分:2)

您还可以注册一个公共助手:

Template.registerHelper('isTrue', function(boolean) {
    return boolean == "true";
});

并在你的html中调用它:

<input type="checkbox" checked="{{isTrue attr}}"/>