Articles of handlebars.js

使用Node.js,Handlebars和Express进行模板inheritance

我刚开始使用Node.js,所以我构build了非常简单的应用程序来练习基础知识。 我试图得到一些像Django一样的模板inheritance工作,但是我在如何做到这一点上有些遗憾。 我明白,图书馆的“expression手柄”包括布局的概念,我认为这可能是最好的办法,但乍一看,我不知道它是否允许一步以上的inheritance,或者使用它来replace不同的块(我看到了一个总体布局,其中插入了其他模板来代替{{{body}}}标记,尽pipe可能有更多的技巧)。 所以,我的问题是:如何实现一个多层模板的inheritance(也有儿童插入不同的独立块,而不是一个单一的内容)? 我正在使用Node.js,Express和句柄,但如果后两者不可能,我不介意尝试其他框架或模板语言。 谢谢! 编辑: 我的意思是伪代码的例子: 首先,我们可以有一个共同的外部模板: <html> <head></head> <body> <h1> Main Title </h1> <h2> {{section name block}} </h2> <h3> {{subsection name block}} </h3> {{content block}} </body> </html> 然后是另一个(中间模板),replace外部块的一些(可能会添加其他块): {{inheriting from outer template}} {{section name block}} Section Three {{/block}} 最后是一个内部的,这将是从JavaScript代码调用的一个: {{inheriting from middle template}} {{subsection name block}} Subsection Two {{/block}} {{content block}} <p>This […]

我如何注册和使用Handlebars助手和Node?

我正在使用Handlebars和Node,并且工作正常: require('handlebars'); var template = require('./templates/test-template.handlebars'); var markup = template({ 'some': 'data' }); console.log(markup); 这工作正常。 但是,我需要在我的模板中注册并使用自定义帮助器。 所以,现在我的代码如下所示: var Handlebars = require('handlebars'); Handlebars.registerHelper('ifEqual', function(attribute, value) { if (attribute == value) { return options.fn(this); } else { return options.inverse(this); } }); var template = require('./templates/test-template.handlebars'); var markup = template({ 'some': 'data' }); console.log(markup); 但现在当我运行我的脚本,我得到了 错误:缺less帮手:'ifEqual' 所以:我怎样才能定义和使用节点中的自定义助手?

有没有办法忽略Handlebars模板内的Handlebars模板?

我在我的服务器端节点应用程序中使用Express + Handlebars,我想将客户端模板作为我要呈现的页面的一部分发送到浏览器。 的index.html <html> <head> <title>{{title}}</title> </head> <body> <div> {{stuff}} </div> <script id="more-template" type="text/x-handlebars-template"> <div>{{more}}</div> </script> </body> 不幸的是,句柄试图渲染#more-template脚本块中的东西。 (这只是删除{{more}}因为它在服务器模板的上下文中是未定义的。 有没有办法让我忽略脚本标签内的东西? (所以客户端模板可以使用它) 我已经看到了这个问题: 服务器和客户端上的Handlebars.js的Node.js ,我宁愿只使用1模板引擎。

用节点注册handlebars助手完全没有

我试图写我自己的把手帮手,我没有得到任何地方。 我使用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') }); 然而{{log'test'}}或者{{test}}在我的模板里面什么都不做。 在浏览器或terminal控制台中没有产生js错误。 我知道句柄工作正常,因为我有其他的HBvariables正确显示。 我在我的智慧结束在这里试图做一些非常简单的事情,否则我不会尴尬我的自我提出这样一个简单的问题。 感谢您的时间。

预编译手柄模板

我想知道什么是保存预编译的句柄模板并将其包含在HTML文件中的最佳方法。 该网站: http : //handlebarsjs.com/precompilation.html只是build议打电话 把手infile -f outfile 我把一个模板放在一个文件中,并调用命令。 我有一个JS文件包含一个函数program1我现在怎样编译第二个模板? http://jsperf.com/jquery-template-vs-handlebars中的示例包含多个名为program[1-9](…)函数,我假设它们必须以某种方式生成。 是否存储预编译模板的好build议? 我看到示例将脚本或链接标记embedded到HTML文件中,并通过AJAX加载模板并dynamic编译它们。 最好的,Bernhard

assembly句柄嵌套的math帮手

我想知道是否有办法在一个操作中合并两个[Assemble Math助手] 1 。 例如: 我想做{{multiply 12 a}}然后 对结果做{{round}} 谢谢你的帮助。

把手中的“玉块”相当于

车把与玉石块有相同的function吗? 我知道它有局限性,但是我不明白如何用部分模型来模仿玉石的function。 下面是我想用玉来完成的一个例子: 主模板: // layout.jade doctype 5 html head title= title link(rel='stylesheet', href='/stylesheets/style.css') block head body header block header block content footer block footer block scripts 其他模板: // camera.jade extends layout block head link(rel='stylesheet', href='/stylesheets/camera.css') block header h1 Camera block content section#secScreen video#vdoScreen aside#asdControls nav a(href='/') Back a(href='') Refresh a(href='/gallery') Gallery block scripts script(src='/javascripts/camera.js') […]

Express&Handlebars全球物业

我使用Handlebars(使用express3-handlebars)模板和Passport在NodeJS应用程序中进行身份validation。 所有的工作都很好,但是我想知道是否有办法将Passport创build的req.user对象全局传递给Handlebars。 所以我的标题部分可能看起来像这样: <header> <h1>My Title</h1> {{#if user}} <p>Hello {{user.name}}</p> {{else}} <p>Please <a href='/login'>Log In</a></p> {{/if}} </header> 就像现在这样,我必须在每个页面呈现中明确地传递用户对象: app.get('/', function(req, res){ res.render('home', { page_title: 'welcome', user: req.user }); }); 这似乎是错误的方式去做,因为我需要在每一页上,我可以不只是设置一次,让所有页面都可以访问它吗? 当我实例化Handlebars时,我无法做到这一点,因为它取决于用户使用Passportlogin,这并不总是如此。 创build一个全局的“page_options”对象,附加并传递给每个渲染是正确的解决scheme还是Handlebars / Express有办法处理这个问题?

如何将app.js中的常用variables渲染到所有的express中

在我的Node.js应用程序中,一些渲染variables或每条路线是常见的。每条路线上都有大约4-5个variables。 我有大约20条路线。 目前我正在做res.render每个路由中的这些variables 有没有一种方法可以将这些常用variables传递给每个路由正在使用的某个地方(比如:app.js),以便我可以清理一下我的代码。 我使用express.js作为模板的节点和handlebars 。 编辑:我想我应该多解释一下 res.render('abc', { commonitem1: 'one', commonitem2: 'two', … }); ————————————- another route res.render('xyz', { commonitem1: 'one', commonitem2: 'two', … }); 我想避免在我的每一条路线上重复这一点,并想从一个共同的地方渲染它。

无法使用Express Handlebars在目录中查看视图

我正在遵循从Express Generator获取的基本应用布局,并尝试将其configuration为Handlebars。 片段: var exphbs = require('express-handlebars'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views/')); app.engine('handlebars', exphbs({defaultLayout: 'main'})); app.set('view engine', 'handlebars'); 一切都很好,直到我尝试将Handlebars的扩展名更改为.hbs ,如下所示: app.engine('handlebars', exphbs({defaultLayout: 'main', extname: '.hbs'})); (并且当然重命名文件)。 这导致: 错误:无法在视图目录中查找视图“错误” 我已经在Express-handlebars.js源代码中查看function ExpressHandlebars(config) ,它确实试图设置extname适当。 我究竟做错了什么?