2013-03-06 21 views
8

好吧,我知道這是超級基本的,但我一直在盯着它2天,不明白爲什麼它不工作。我正在使用Handlebars IF幫助程序有條件地呈現模板。#if在把手中的聲明

下面是HTML:

<head> 
    <title>flash</title> 
</head> 

<body> 
    {{#if isTrue}} 
     {{> hello}} 
    {{else}} 
     {{> goodbye}} 
    {{/if}} 
</body> 

<template name="hello"> 
    <h1>Hello!</h1> 
</template> 

<template name="goodbye"> 
    <h1>Goodbye!</h1> 
</template> 

下面是簡單的咖啡文件:

isTrue = true 

我希望{{>你好}}模版來表現,但沒有運氣。我剛剛獲得了{{> goodbye}}模板。這很奇怪,因爲我有其他項目,我已經成功完成了這個項目。我必須在這裏錯過一些明顯的東西。

回答

20

isTrue變量需要放在模板中才能使用。所以,把身體內容模板:

<body> 
    {{> body}} 
</body> 

<template name="body"> 
    {{#if isTrue}} 
     {{> hello}} 
    {{else}} 
     {{> goodbye}} 
    {{/if}} 
</template> 

然後你就可以定義isTrue這樣的:

Template.body.helpers 
    isTrue: -> true 
+0

嗨Sjoerd,我重新實現,它的工作。謝謝。奇怪的是,我有另一個項目使用如果助手在常規的HTML體內,它工作得很好。很奇怪,但這個修復讓我回到了正軌。再次感謝。 – ppedrazzi 2013-03-06 17:59:54

5

注:

Template.body.isTrue = -> true 

現在已經過時了。

新的語法如下:

Template.test.helpers({ 
 
    'isTrue': function(){ 
 
    return true; 
 
    } 
 
});

它應該仍然工作,但如果你打開你的控制檯,它會給你一個有關語法警告。

1

與流星1.2.0.2,你可以做這樣的

Template.hello.helpers({ 
    isTrue() { return true } 
});