Могут ли дочерние шаблоны Meteor обращаться к родительским шаблонам?

Скажем, у нас есть родительский шаблон и дочерний шаблон:

<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');
   }
}

Есть ли способ, чтобы дочерний шаблон имел к нему доступ?

Ответы

Ответ 1

Edit

Вы можете сделать универсальный помощник руля, чтобы вы могли использовать значения Session в любом месте вашего html:

Клиент 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>

Ответ 2

Вы также можете зарегистрировать общий помощник:

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

И назовите его так же, как в вашем html:

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