Handlebars 的模版,其判斷式功能的延展性不佳,類似 {{#if 3>2}} 這類的用法都預設無法使用。RegisterHelper 就是用來解決這個問題。
使用方法
初始化
1 2 |
//initialize handlebars (not express-handlebars) const Handlebars = require('handlebars') |
判斷式(僅參數寫在模版中)
1 2 3 4 |
// 裡頭的 arg1 == arg2 可以因應需求變化,如 ==, >=, <=, <, > ...等等 Handlebars.registerHelper('ifEquals', function (arg1, arg2, options) { return (arg1 == arg2) ? options.fn(this) : options.inverse(this) }) |
判斷式(參數和判斷式都寫在模版中)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Handlebars.registerHelper('compare', function(left, operator, right, options) { // arguments.length 是原生用法,可得知引入的參數數量 if (arguments.length < 3) { throw new Error('Handlerbars Helper "compare" needs 2 parameters') } var operators = { '==': function(l, r) {return l == r } }; if (!operators[operator]) { throw new Error('Handlerbars Helper "compare" doesn\'t know the operator ' + operator) } var result = operators[operator](left, right) if (result) { return options.fn(this) } else { return options.inverse(this) } }) //模版中 {{#compare people.name '==' 'peter'}} 他的名字是peter {{else}} 他的名字不是peter {{/compare}} |
參考資料
1. Handlebars Block helpers
2. 自定義 Helper 的用法