【问题标题】:Handlebars does not recognize helper车把不识别助手
【发布时间】:2017-04-30 12:33:50
【问题描述】:

我在网上找到了这个检查变量是否等于某个字符串的助手。我尝试将此帮助程序添加到我的 index.hbs 文件中,但出现以下错误:缺少帮助程序:“if_eq”

谁能告诉我如何解决这个问题?我做了他们在官方 Handlebars 文档中要求我做的事情,所以我不明白。我使用 NodeJS/Express,但没有 require('handlebars')require('express-handlebars'),因为这就是 express-generator 为我生成它的方式。

index.hbs:

<script>
Handlebars.registerHelper('if_eq', function(a, b, opts) {
    if(a == b)
        return opts.fn(this);
    else
        return opts.inverse(this);
});
</script>

{{#each tasks}}
    {{#if_eq status 'unfinished'}}
        [do something]
    {{else}}
        [do something else]
    {{/if_eq}}
{{/each}}

【问题讨论】:

  • 所以你没有使用车把也没有使用快速车把......你用什么来渲染车把模板?我可以看到问题,但我需要更多信息才能给你一个合适的答案。
  • @MarcosCasagrande 我使用res.render()。在 app.js 中,我通过以下方式将 Handlebars 设置为我的视图引擎:app.set('view engine', 'hbs');
  • @MarcosCasagrande 所以我查看了我的 node_modules 并且 express-generator 包含了 hbs。这是否意味着我必须在 app.js 中添加帮助程序?如果是这样,为什么官方文档中没有提到它?根据them“可以从模板中的任何上下文访问帮助程序。”
  • 检查我的答案。

标签: javascript node.js express handlebars.js


【解决方案1】:

express-generator 使用:hbs 包,您可以在 here 中看到:

所以你需要先在服务端注册helper,像这样:

const hbs = require('hbs');
const express = require('express');
const app = express();

app.set('view engine', 'hbs');

hbs.registerHelper('if_eq', function(a, b, opts) {
    if(a == b)
        return opts.fn(this);
    else
        return opts.inverse(this);
});
//... rest of your server code

index.hbs 中删除助手,因为这是在客户端注册助手,而您正在服务器端渲染把手。

index.hbs

{{#each tasks}}
    {{#if_eq status 'unfinished'}}
        [do something]
    {{else}}
        [do something else]
    {{/if_eq}}
{{/each}}

【讨论】:

    猜你喜欢
    • 2020-04-02
    • 2013-02-05
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多