2013-02-28 217 views
16

说我们有一个父模板和子模板:流星子模板可以访问父模板助手吗?

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

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

如果我们分配“秀”给父模板:

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

有没有什么办法让孩子模板访问它?

+0

我会说这更是一个车把的问题 – 2013-02-28 03:54:00

+0

Handlebars支持'../',但是我不确定它会走多远 – Swadq 2013-02-28 08:08:05

回答

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 helpers}}中使用,但不能与模板一起使用,但如果它包含子模板,则它可以在块助手中使用。

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

我在手柄文档中看到了这个,但是您能否在Meteor中重现这一点?当我尝试我在控制台中出现错误:“未捕获的错误:太多'..'段”。据我了解../引用我们正在使用的数据的父上下文,所以如果我们有:context = {name:John,posts:{post1:body1,post2:body2}}并且我们循环遍历发布属性我们可以使用../来访问名称属性。但我认为我们不能使用../来访问我们尚未访问的全新数据对象,或者至少我无法使其工作。 – J2K 2013-02-28 19:56:14

+0

是的你是对的,它看起来像'../'符号不一定总是与子模板一起工作。我用另一个解决方案更新了答案 – Akshat 2013-02-28 20:11:53

+0

感谢您的回答。不完全是我所希望的(如果它工作,../show将是完美的),但我认为这是一个有用且相当干净的工作。 – J2K 2013-03-01 18:56:35

2

您也可以注册一个共同的帮手:

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

,并调用它,就像在你的HTML:

<input type="checkbox" checked="{{isTrue attr}}"/> 
相关问题