2017-01-02 46 views
2

我正在使用expressjs和handlebars作为模板引擎,下面的代码在Webstorm IDE中使用Express generator。代码中没有可见的handlebars要求(我猜快递生成器有其他地方不可见)Handlebars寄存器支持Expressjs的服务器端

var app = express(); 
. 
.  
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'hbs'); 

如何在这种情况下在服务器端使用registerHelper?

我的其他渲染和partials正在工作。所以handlebars正在做它的工作。它只是registerHelper似乎是担心的原因。

回答

5

我认为express-generator只是设置view enginehbs而已。要配置hbs引擎,您必须使用express-handlebars

例如

var app = express(), 
exphbs = require("express-handlebars"); 

app.engine("hbs", exphbs({ 
    defaultLayout: "main", 
    extname: ".hbs", 
    helpers: require("./public/js/helpers.js").helpers, // same file that gets used on our client 
    partialsDir: "views/partials/", // same as default, I just like to be explicit 
    layoutsDir: "views/layouts/" // same as default, I just like to be explicit 
})); 
app.set("view engine", "hbs"); 

而且,helpers.js

var register = function(Handlebars) { 
    var helpers = { 
    // put all of your helpers inside this object 
    foo: function(){ 
     return "FOO"; 
    }, 
    bar: function(){ 
     return "BAR"; 
    } 
    }; 

    if (Handlebars && typeof Handlebars.registerHelper === "function") { 
    // register helpers 
    for (var prop in helpers) { 
     Handlebars.registerHelper(prop, helpers[prop]); 
    } 
    } else { 
     // just return helpers object if we can't register helpers here 
     return helpers; 
    } 

}; 

module.exports.register = register; 
module.exports.helpers = register(null);  

来源:http://www.codyrushing.com/using-handlebars-helpers-on-both-client-and-server/

+0

,然后如何在helpers.js定义佣工? – knowledgeseeker

+0

示例'helpers.js'在博客上可用。 –

0

我已经给了一个竖起大拇指@Mukesh夏尔马,他非常近了,对我工作的语法和真的把我引向了它。

他正在做更多的事情来使它适用于我认为的前端。我需要的只是以下内容

// index.js 

//in the declarations 
const exphbs = require('express-handlebars'); 

//when configuring the app view engine 
app.engine('.hbs', exphbs({ 
    extname: '.hbs', 
    helpers: require('./config/handlebars-helpers') //only need this 
})); 
app.set('view engine', '.hbs'); 

然后我有一个简单的文件,包括我从哪里有帮助的东西。

// config/handlebars-helpers.js 

module.exports = { 
    ifeq: function(a, b, options){ 
    if (a === b) { 
     return options.fn(this); 
     } 
    return options.inverse(this); 
    }, 
    bar: function(){ 
    return "BAR!"; 
    } 
} 

无需通过或进口车把快递 - 包括辅助函数的简单对象下佣工exhbs选项散列的一部分,让表达HBS通过它自己的方式做所有的登记的。

(加成IFEQ是一个很小的助手,对于一些比较两个参数并且如果为真将显示块..有用,如:

类=“{{#ifeq thisUrl‘/约’}}活性{{/ IFEQ}}”。要设置一个导航丸类为‘主动’) 在这里找到https://gist.github.com/pheuter/3515945

相关问题