Les partiels avec Node.js + Express + Hogan.js
Je suis le développement d'un site avec Node.js + Express et en utilisant comme moteur d'affichage Hogan.js.
C'est mon fichier app.js
:
/**
* Module dependencies.
*/
var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path');
var app = express();
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'hjs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(app.router);
app.use(require('less-middleware')({ src: __dirname + '/public' }));
app.use(express.static(path.join(__dirname, 'public')));
});
app.configure('development', function(){
app.use(express.errorHandler());
});
app.get('/', routes.index);
app.get('/about', routes.about);
app.get('/users', user.list);
http.createServer(app).listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
Le fichier /routes/index.js
est:
/*
* GET pages.
*/
exports.index = function(req, res){
res.render(
'index',
{
title: 'Home Page',
author: 'Bruce Wayne'
}
);
};
exports.about = function(req, res){
res.render(
'about',
{
title: 'About Page',
author: 'Bruce Wayne'
}
);
};
Dans /views
dossier, il y a:
|- part.hjs
|- index.hjs
|- cv.hjs
Le fichier part.hjs
est:
<h3>Hello {{ author }}</h3>
Le fichier index.hjs
est:
<h1>Title: {{ title }} </h1>
{{> part }}
Welcome to Gotham City.
Et le fichier about.hjs
est:
<h1>Title: {{ title }}</h1>
{{> part }}
I'm not Joker.
J'ai deux questions:
- Comment puis-je utiliser correctement les partiels dans mes pages? (ce code ne fonctionne pas)
- Puis-je utiliser le même "titre" de deux pages ou plus, sans répéter les valeurs d'affectation dans le fichier
/routes/index.js
?
Cordialement, Vi.
- Merci de poster cette question. Sheesh. googlé autour pour un peu, jusqu'à ce que je suis tombé sur ce petit bijou.
- Je pense Oren réponse est la bonne pour cette question.
- La version de express êtes-vous ici?
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une solution pour la première question.
Tout d'abord, j'ai enlevé
hjs
:Puis, j'ai installé le package
hogan-express
:En outre, j'ai édité
app.js
:Et
routes/index.js
:Maintenant, dans
/views
il y aindex.html
,part.html
.Le fichier
part.html
contient:Le fichier
index.html
contient:Donc, Il fonctionne très bien.
hjs
maintenant, ajoutez simplementpartials:{ var: file_path }
dansrender
Au moins en Express 4+, les partiels simplement travailler hors de la boîte. Vous pouvez utiliser express-générateur (à partir de mnp) avec --hogan ou de l'option-H.
Après avoir fait cela, vous devez ajouter les partiels à la méthode render:
Puis, dans votre utilisation du modèle {{ > xxx }}
REMARQUE: c'est l'en-tête.hjs dans les vues
À utiliser les partiels avec express+hogan, il suffit de faire les opérations suivantes:
Et maintenant, yourMainView.html:
Avis de la triple '{' au lieu de double comme vous le faites! Que dire hogan (moustache) pour analyser ce que HTML plutôt que d'un string!
Que c'est.
Que pour vos partiels question, si vous utilisez consolidate.js vous pouvez tout simplement faire:
C'est un problème. Une prise en charge partielle est difficile à trouver en Express 3.
Votre meilleur pari est de:
https://github.com/visionmedia/consolidate.js
npm install consolidate
Ces patchs prendre différentes approches à l'ajout d'harmoniques pour Hogan:
Malheureusement, le moteur n'a pas un crochet pour le système de fichiers basé partiels en natif, je pense que les gens sont confus au sujet de comment et où partiels devraient être mises en œuvre. J'ai fini avec de LinkedIn Dust.js la mise en œuvre, depuis une prise en charge partielle était déjà là. Maître a effectivement encore mieux soutenir, en plus j'ai soumis un patch hier pour les chemins relatifs.
Josh
Je voudrais utiliser
mmm
au lieu dehjs
.https://github.com/techhead/mmm
Avertissement: j'ai écrit le paquet.
Il suffit de remplacer toutes les occurrences de
hjs
avecmmm
et partiels va commencer à travailler. Il y a beaucoup plus d'informations et un exemple sur le lien ci-dessus.Comme pour votre autre question, si vous voulez les propriétés de partager à travers de multiples points de vue, vous avez quelques options.
Lorsque vous appelez
res.render(name, options)
, leoptions
va effectivement être fusionnées surres.locals
etapp.locals
avant d'être transmises au moteur de rendu. Donc pour définir une application à l'échelle de la propriété, vous pouvez simplement l'attribuer àapp.locals
.Ce concept s'applique vraiment à peu près n'importe quel Express 3 Moteur d'Affichage.
Cependant, pour
mmm
en particulier, veuillez consulter la section en vertu de la Logique de Présentation pour plus de moyens pour lier les valeurs à un modèle ou un ensemble de modèles.