n0p*_*0pe 7 javascript helper express handlebars.js
我有一个非常简单的把手助手文件helpers/handlebars.js:
var hbs = require('express-handlebars');
hbs.registerHelper("inc", function(value, options) {
return parseInt(value) + 1;
});
Run Code Online (Sandbox Code Playgroud)
但是,正如预期的那样,我不能引用{{#inc}}帮助器,因为我没有将它传递给res.render()函数.有没有办法让我的文件中的所有助手全局并"自动包含"?
编辑:
在尝试了@ 1cgonza的精彩答案后,我得到:
hbs.registerHelper("inc", function(value, options) {
^
TypeError: undefined is not a function
Run Code Online (Sandbox Code Playgroud)
运行应用程序时.这是app.js:
var engine = require('express-handlebars');
require('./helpers/handlebars.js')(engine);
app.engine('hbs', engine({defaultLayout: 'layout', extname: 'hbs'}));
app.set('view engine', 'hbs');
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
1cg*_*nza 18
您可以尝试将助手导出为模块,然后将其包含在主app.js中
像这样的东西:
在你的 helpers/handlebars.js
function hbsHelpers(hbs) {
hbs.registerHelper("inc", function(value, options) {
return parseInt(value) + 1;
});
// More helpers...
}
module.exports = hbsHelpers;
Run Code Online (Sandbox Code Playgroud)
然后在你的app.js(或你用作索引的文件)中.
var hbs = require('express-handlebars');
require('./helpers/handlebars')(hbs);
Run Code Online (Sandbox Code Playgroud)
那对你有用吗?
编辑
基于express-handlebars 文档,我会将您的功能更改为helpers/handlebars.js以下内容:
function hbsHelpers(hbs) {
return hbs.create({
helpers: { // This was missing
inc: function(value, options) {
console.log('reading it');
return parseInt(value) + 1;
}
// More helpers...
}
});
}
module.exports = hbsHelpers;
Run Code Online (Sandbox Code Playgroud)
如果有效,请告诉我们.
编辑2:
我的错误,将帮助器包装在文件中helpers:{}的create()函数中handelbars.js.我已经编辑了我以前的答案,看看我在哪里发表评论,知道我在说什么.
至于app.js我认为它有点混乱,所以让我重命名一些事情来说清楚:
// I've changed this from engine to exphbs,
// so there is no confusion with the express engine object that we use later.
var exphbs = require('express-handlebars');
// Create an instance of the express-handlebars
// If you want to pass any option offered by express-handlebar module
// do it inside the create() in the handlebars.js file
var handlebars = require('./helpers/handlebars.js')(exphbs);
// The handlebars variable now has an object called engine.
// Use that to define your app.engine
// As said before, you don't need to define any options here.
// Everything is defined in the create() in handlebars.js
app.engine('hbs', handlebars.engine);
// If you are using a different extension, you can change hbs to whatever you are using.
app.set('view engine', 'hbs');
Run Code Online (Sandbox Code Playgroud)
IT *_*ogs 12
你可以试试:
在helpers/handlebars.js中:
var register = function(Handlebars) {
var helpers = {
inc: function(value, options) {
return parseInt(value) + 1;
},
foo: function(var1, var2) {
return ....
}
};
if (Handlebars && typeof Handlebars.registerHelper === "function") {
for (var prop in helpers) {
Handlebars.registerHelper(prop, helpers[prop]);
}
} else {
return helpers;
}
};
module.exports.register = register;
module.exports.helpers = register(null);
Run Code Online (Sandbox Code Playgroud)
在app.js中:
var exphbs = require('express-handlebars');
var hbsHelpers = exphbs.create({
helpers: require("./helpers/handlebars.js").helpers,
defaultLayout: 'layout',
extname: '.hbs'
});
app.engine('.hbs', hbsHelpers.engine);
app.set('view engine', '.hbs');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13866 次 |
| 最近记录: |