【问题标题】:#if Statements in HandlebarsHandlebars 中的 #if 语句
【发布时间】:2015-10-15 01:57:09
【问题描述】:

好的,我知道这是超级基本的,但我已经盯着它看了 2 天,看不出它为什么不起作用。我正在使用 Handlebars 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

我希望 {{> hello}} 模板能够呈现,但没有运气。我刚得到 {{> goodbye}} 模板。这很奇怪,因为我有其他项目成功地做到了这一点。我一定在这里遗漏了一些明显的东西。

【问题讨论】:

    标签: meteor handlebars.js


    【解决方案1】:

    isTrue 变量需要在模板中才能工作。因此,将正文内容放入模板中:

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

    然后你可以像这样定义isTrue

    Template.body.helpers
      isTrue: -> true
    

    【讨论】:

    • 嗨 Sjoerd,我重新实现了它,它工作了。谢谢你。奇怪的是,我有另一个项目在常规 HTML 正文中使用 if 助手,它工作得很好。很奇怪,但这个修复让我回到了正轨。再次感谢。
    【解决方案2】:

    注意:

    Template.body.isTrue = -> true
    

    现已弃用。

    新语法如下所示:

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

    它应该仍然可以工作,但如果你打开你的控制台,它会给你一个关于语法的警告。

    【讨论】:

      【解决方案3】:

      使用 Meteor 1.2.0.2 你可以这样做

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-07
        • 1970-01-01
        • 2012-05-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多