我的文件如下:
/assets
|- /templates
|- /helpers
|- iff.js
|- /partials
|- head.hbs
|- chat.hbs
|- index.hbs
|- /public
|- chat.html <---- exported by webpack build command
|- index.html <---- exported by webpack build command
|- webpack.config.js
在chat.hbs中,我包含了head.hbs,如下所示:
{{>head pageName='Chat Room'}}
在index.hbs中,我包含了head.hbs,如下所示:
{{>head}}
在head.hbs中,我将自定义帮助程序iff称为:
{{#iff pageName '!==' undefined}}
<span> {{pageName}}</span>
{{/iff}}
自定义帮助程序iff.js如下:
module.exports = (a,operator,b,opts)=> {
var bool = false;
switch(operator) {
case '==':
bool = a == b;
break;
case '!==':
bool = a !== b;
break;
case '>':
bool = a > b;
break;
case '<':
bool = a < b;
break;
default:
throw "Unknown operator " + operator;
}
if (bool) {
return opts.fn(this);
} else {
return opts.inverse(this);
}
}
并设置自定义助手,如下所示:webpack.config.js:
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: {
'app': [
'./assets/js/app.js'
]
},output: {
path: path.join(__dirname,'public'),filename: 'js/[name].min.js'
},optimization: {
minimize: false
},plugins: [
new webpack.optimize.OccurrenceOrderPlugin(),new HtmlWebpackPlugin({
template: './assets/templates/index.hbs',filename: 'index.html'
}),new HtmlWebpackPlugin({
template: './assets/templates/chat.hbs',filename: 'chat.html'
})
],module: {
rules: [{
test: /\.(hbs|handlebars)$/,use: [{
loader: "handlebars-loader",options: {
partialDirs: path.resolve(__dirname,'./assets/templates/partials'),knownHelpersOnly: false,helperDirs: path.resolve(__dirname,"./assets/templates/helpers")
}
}]
}]
}
};
结果是: 对于index.html,{{#iff}}和{{/ iff}}块之间的元素无法呈现,这很好。 但是对于chat.html,{{#iff}}和{{/ iff}}之间的代码块在未传递变量pageName的情况下呈现。
我知道我可以自定义帮助程序,而不必使用{{/ iff}}结构。
但是我不知道有什么方法可以使其与服务器端node.js上的手柄一样工作。