TypeError:Handlebars.registerHelper不是函数

时间:2015-11-29 03:20:11

标签: javascript node.js handlebars.js handlebarshelper

两天前我对节点和车把都是全新的,所以请耐心等待。 我试图使用自定义车把助手,但我不完全确定把它放在哪里。

我一直得到“TypeError:Handlebars.registerHelper不是函数”

现在我把它放在我的server.js文件中。不确定这是否正确。

var express  = require('express');
var app      = express();
var Handlebars  = require('express-handlebars');


app.engine('handlebars', Handlebars({
    defaultLayout: 'main'
}));

app.set('view engine', 'handlebars');

Handlebars.registerHelper("if", function(conditional, options) {
  if (options.hash.desired === options.hash.type) {
    options.fn(this);
  } else {
    options.inverse(this);
  }
});

3 个答案:

答案 0 :(得分:5)

根据此处的文档,您似乎需要像这样使用它:https://github.com/ericf/express-handlebars

var hbs = Handlebars.create({
  // Specify helpers which are only registered on this instance.
  helpers: {
    foo: function () { return 'FOO!'; },
    bar: function () { return 'BAR!'; }
  }
});

答案 1 :(得分:2)

R.A。卢卡斯是对的。

您从require('express-handlebars')获得的对象不是任何普通的旧手柄对象'。它是仅用于快速把手的另一个对象

您所做的是将助手(以及其他设置)传递给该对象的.create()功能。

这是一个功能齐全的例子,我在快递把手中定义了2个助手

var express = require('express');
var exphbs = require('express-handlebars');
var app = express();

//Here you can pass helpers that you would normally define in registerHelpers
//and you can also define stuff like `defaultLayout` and `partialsDir`
var hbs = exphbs.create({
    helpers: {
        sayHello: function () { alert("Hello World") },
        getStringifiedJson: function (value) {
            return JSON.stringify(value);
        }
    },
    defaultLayout: 'main',
    partialsDir: ['views/partials/']
});
app.engine('handlebars', hbs.engine);
app.set('view engine', 'handlebars');
app.set('views', path.join(__dirname, 'views'));

答案 2 :(得分:2)

刚遇到同样的问题。感谢R.A.Lucas和Drkawashima,上面的答案都是正确的,但这里的选项稍微短一点。

SELECT ID,Comp,Role
FROM table1
WHERE ID IN(SELECT ID FROM table1 GROUP BY ID) AND Role != 'All'

UNION
SELECT ID,Comp,Role
FROM table1
WHERE ID IN(SELECT ID FROM table1 GROUP BY ID HAVING COUNT(ID)=1)