[英]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.