Handlebars注册helper

2020-06-29  本文已影响0人  IamaStupid

helper有什么用?

Handlebars模板中,有{{#if }},{{{{#each }}...表达式代码,但是这些表达式功能往往不够用。
比如:{{#if ("a" == "a")}} 这样的判断是会报错的,因为它并不能解析这个等值判断,所以这时候就需要使用helper。

注册helper

global.ROOT = __dirname
let express = require('express')
let exphbs = require('express-handlebars')

let app = express()

app.engine('.hbs', exphbs({
  extname: '.hbs',
  defaultLayout: 'main',
  layoutsDir: `${global.ROOT}/src/views/layout`,
  partialsDir: `${global.ROOT}/src/views/partials`,
  helpers: {
      isEqual: function(v1, operator, v2) {
          if (operator == "==")
              return v1 == v2
          } if else (operator == "===") {
              return v1 === v2
          }
      }
  }
}))
// app.set('views', `${global.ROOT}/src/views`)
app.set('views', path.join(`${global.ROOT}/src`, 'views'))
app.set('view engine', `.hbs`)
// app.engine('html', cons.ejs)

使用isEqual:

{{#if (isEqual "a" "===" "a")}}
  ......
{{/if}}

另一种引用方法:

{{#isEqual "a"  "==="  "a"}}
  ......
{{else}}
  ......
{{/isEqual}}

对应的helper也有所不同:
helpers: {
      isEqual: function(v1, operator, v2, options) {
          let res;
          if (operator == "==")
              res = (v1 == v2)
          } if else (operator == "===") {
              res = (v1 === v2)
          }
          if (res) {
              options.fn(this)
          }
          return options.inverse(this)
      }
}
上一篇 下一篇

猜你喜欢

热点阅读