繁体   English   中英

如何检查 Handlebars 中字符串变量的比较值

[英]How to check compare value of string variable in Handlebars

我正在尝试使用 express-handlebars 作为我的模板引擎构建一个 NodeJS express 应用程序。 在我的渲染 function 中,我传递了一个 JSON object 用于有条件地组合一些内容,如下所示:

JSON OBJECT:

服务器.js

let MyObject = {
    'email':'dev@example.com',
    'acc_type':'Employer'
}

渲染 FUNCTION:

router.get('dashboard-settings',(req, res)=>{
     res.render('dasboard-settings',{'title':'Settings','mydata':MyObject })
})

最初,我是这样做的:

仪表板-settings.handlebars

{{#if mydata.acc_type == 'Employer'}}
<div class='display-text'>Welcome Employer</div>
{{else}}
<div>Welcome Freelancer</div>
{{/if}}

但这没有用。 经过进一步研究,我在某处读到有人建议我使用 handlebars.js 库并创建一个称为帮助器的东西,我这样做是这样的:

进程.js

  Handlebars.registerHelper('ifeq', function (a, b, options) {
    if (a == b) { return options.fn(this); }
    return options.inverse(this);
});

然后我改变了我在dashboard-settings.handlebars中的方式,就像这样

{{#ifeq mydata.acc_type 'Employer'}}
<div class='display-text'>Welcome Employer</div>
{{else}}
<div>Welcome Freelancer</div>
{{/ifeq}}

现在这是一个错误,不管为什么,我知道我也有可能没有正确访问mydata.acc_type

我怎样才能完全解决这个问题。 以下是我在浏览器中遇到的错误:

Error: Missing helper: "ifeq"
    at Object.<anonymous> (B:\MyProjects\Node Projects\cs\node_modules\handlebars\dist\cjs\handlebars\helpers\helper-missing.js:19:13)
    at Object.wrapper (B:\MyProjects\Node Projects\cs\node_modules\handlebars\dist\cjs\handlebars\internal\wrapHelper.js:15:19)
    at Object.eval [as main] (eval at createFunctionContext (B:\MyProjects\Node Projects\cs\node_modules\handlebars\dist\cjs\handlebars\compiler\javascript-compiler.js:262:23), <anonymous>:11:102)
    at main (B:\MyProjects\Node Projects\cs\node_modules\handlebars\dist\cjs\handlebars\runtime.js:208:32)
    at ret (B:\MyProjects\Node Projects\cs\node_modules\handlebars\dist\cjs\handlebars\runtime.js:212:12)
    at ret (B:\MyProjects\Node Projects\cs\node_modules\handlebars\dist\cjs\handlebars\compiler\compiler.js:519:21)
    at ExpressHandlebars._renderTemplate (B:\MyProjects\Node Projects\cs\node_modules\express-handlebars\lib\express-handlebars.js:250:9)
    at ExpressHandlebars.<anonymous> (B:\MyProjects\Node Projects\cs\node_modules\express-handlebars\lib\express-handlebars.js:173:15)

在您的情况下,您实际上不需要新的助手,您可以使用现有的eq助手:

{{#if (eq mydata.acc_type 'Employer')}}
<div class='display-text'>Welcome Employer</div>
{{else}}
<div>Welcome Freelancer</div>
{{/if}}

但是,如果您仍然需要自定义助手,则必须以这种方式注册它:

const express = require('express')
const exphbs = require('express-handlebars')
const Handlebars = require('handlebars')

var app = express()

var hbs = exphbs.create({extname: '.handlebars'})
app.engine(hbs.extname, hbs.engine)
app.set('view engine', hbs.extname)

Handlebars.registerHelper('ifeq', function (a, b, options) { ... })

您在第一个代码中弄乱了()

{{#if (mydata.acc_type == 'Employer')}}
<div class='display-text'>Welcome Employer</div>
{{else}}
<div>Welcome Freelancer</div>
{{/if}}

如果你想在你的app.js中使用 helper

handlebarshelper=require(your/path/to/process.js)
app.engine('hbs', handlebars({
    extname: 'hbs',
    defaultLayout: 'layout',
    helpers: handlebarsHelper
}));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM