Estoy usando el handlebars.js hbs wrapper en express.js. Tengo plantillas que funcionan bien, pero necesito agregar parciales para representar con mis vistas.Módulo Express.js hbs - registrar parciales del archivo .hbs
me gustaría hacer algo como esto:
hbs.registerPartial('headPartial', 'header');
// where "header" is an .hbs file in my views folder
Sin embargo, se está lanzando una "cabecera parcial no se puede encontrar".
Puedo hacer que registerPartial funcione si paso una cadena de html al segundo parámetro, pero me gustaría usar archivos de vista separados para mis parciales.
No he encontrado ninguna documentación sobre esto, pero espero que me pueda estar perdiendo algo fácil.
¿Alguien sabe cómo usar view files en el método registerPartial? Si es así, ¿cómo implemento esto?
ACTUALIZACIÓN
Para dar más contexto, permítanme añadir más código. Aquí está mi archivo de "servidor" - app.js
var express = require('express')
, routes = require('./routes')
, hbs = require('hbs');
var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'hbs');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
// this is the line that generates the error
hbs.registerPartial('headPartial', 'header');
// What I'm expecting is for "headPartial" to be a compiled template partial
// of the template within views/header.hbs, but it is not loading this way.
// If I do something like hbs.registerPartial('headPartial', '<p>test</p>');
// then it does work. I need to know how to pass an .hbs file to the
// registerPartial method.
// Routes
app.get('/', routes.index);
app.listen(3000);
Y aquí es mi archivo routes.index:
exports.index = function(req, res){
res.render('index', { title: 'Express' })
};
En mi carpeta de puntos de vista, tengo tres plantillas:
views/
header.hbs (this is my partial)
index.hbs
layout.hbs
En mi archivo index.hbs, llamo al parcial 'headPartial' con:
{{> headPartial}}
Cualquier ayuda es muy apreciada.
Niza. ¡Una forma rápida de tener todos los parciales disponibles cuando sea necesario! – swatkins
Gracias Ben, esto realmente ayudó mucho. – Dave