2013-02-28 19 views
16

たちは親テンプレートと子テンプレートがあるとしMeteorの子テンプレートは親のテンプレートヘルパーにアクセスできますか?私たちは、親テンプレートに「ショー」を割り当てた場合</p> <pre><code><template name="parent"> {{> child }} </template> <template name="child"> {{#if show}} //Do something {{/if}} </template> </code></pre> <p>:

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

がアクセス権を持っている子テンプレートのどのような方法がありますそれ?

+0

私は、これはハンドルの質問の多くのだと思い –

+0

ハンドルバーは '../ 'をサポートしていますが、どれくらい前に戻ってくるかわかりません – Swadq

答えて

8

編集

あなたはどこでもあなたの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 helper}}では動作しますがテンプレートでは動作しませんが、サブテンプレートが含まれている場合はブロックヘルパーで動作します。

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

ハンドルバーのドキュメントでこれを見ていますが、これを流星で再現できますか?私が試してみると、コンソールにエラーが表示されます:「未知のエラー:多すぎる」..「セグメント」。私が理解している限り、/私たちが作業しているデータの親コンテキストを参照します:context = {name:John、posts:{post1:body1、post2:body2}}そして私たちは名前プロパティにアクセスするために../を使用できます。しかし私は../を使用して、まだアクセスしていないまったく新しいデータオブジェクトにアクセスすることはできないと思っています。少なくとも、それを動作させることはできません。 – J2K

+0

はい、あなたは正しいです。 '../'表記は必ずしも常にサブテンプレートで動作するわけではありません。 Iveは別の解決策で答えを更新しました – Akshat

+0

答えをありがとう。私が望んでいたものとまったく同じものではありませんでした(それが働くと../showは完璧です)が、これは有用でかなりきれいな仕事です。 – J2K

2

また、一般的なヘルパー登録することができます。

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

をそして、ちょうどあなたのhtmlでそのようにそれを呼び出す:

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