2014-09-28 73 views
4

我试图写我自己的车手帮手,并没有得到任何地方。我使用的是NPM HBS包(Handlebars.registerHelper没有工作),并对其进行注册在app.js像这样:注册车手助手与节点什么也没有

app.set('view engine', 'hbs'); 
var hbs = require('hbs'); 

hbs.registerHelper("log", function(something) { 
    return console.log(something); 
}); 

hbs.registerHelper('test', function() { 
    return console.log('test') 
}); 

然而{{登录 '测试'}}或{{测试}}任何我的模板里面什么都没做。在浏览器或终端控制台中不会产生js错误。我知道句柄工作正常,因为我有其他的hb变量正确显示。我在我的智慧结束这里试图做一些非常简单的事情,否则我不会因为问这样一个简单的问题而尴尬我的自我。

谢谢你的时间。

回答

3

你需要从助手中实际返回一个字符串。 console.log()返回undefined。试试这个:

hbs.registerHelper("log", function(something) { 
    console.log(something); 
    return ''+something; 
}); 

hbs.registerHelper('test', function() { 
    console.log('test'); 
    return 'test'; 
}); 
7

感谢您输入mscdex,但您的回应无效。我会澄清我是如何在这里为其他新手柄工作的。我使用npm hbs包,因为我找到了很好的帮助程序示例。在深入研究之后,我以前的句柄包“express-handlebars”在npm页面上有一些实际工作的例子。我认为我的主要困惑是不知道声明中第一个变量的定义在哪里。

下面是我的app.js文件中的代码,声明要使用哪些句柄包。

var exphbs = require('express-handlebars'); 
app.engine('.hbs', exphbs({defaultLayout: 'main', extname: '.hbs'})); 
app.set('view engine', 'hbs'); 

然后在特定页面的路径助手的定义方式相同的标题或一组数据是:

res.render('editSite', { 
     title: 'Update Existing Site\'s Data', siteVars: siteVars, helpers: { 
      foo: function() { return console.log('test'); } 
     } 
    }); 
+1

那么...... hbs在哪里设置? – 2015-10-02 18:19:13

2
在我看来

的simpliest方式做你想,如果这是对全球佣工(可能不是最好的解决办法,但是...),就是创造你的助手文件:

module.exports = { 
    customif: (options)=>{ 
     return (options.hash.expected === options.hash.val) ? options.fn(this) : options.inverse(this); 
    } 
} 

然后,需要它:

const handlebarsHelpers = require('./helpers/handlebars'); 

最后,当你链接快递到车把,你可以在对象中插入助手:

app.engine('hbs', handlebars({ 
    extname: 'hbs', 
    defaultLayout: 'layout', 
    layoutsDir: __dirname + '/views/layouts/', 
    helpers: handlebarsHelpers 
})); 

而且你可以使用它你的布局blabla.hbs内:

{{#customif expected='foo' val=field}} 
    bar 
{{/customif}} 

对我的作品...