Node.js avec Handlebars.js sur le serveur et le client
J'ai une application dans Node.js à l'aide de Expressjs et le Guidon comme le moteur de template.
Expressjs utilise la mise en page, puis rend la vue. La mise en page (mise en page.hbs) ressemble à ceci:
<!doctype html>
<html lang="en">
<head>
</head>
<body>
{{{body}}}
</body>
</html>
La {{{body}}}
est remplacée côté serveur, dans node.js lorsque vous accédez à un itinéraire. Par exemple:
app.get('/', function(req, res){
res.render('index'})
})
Remplacera le {{{body}}}
étiquette avec le contenu de l'index.hbs.
Maintenant, sur le côté client, je suis en utilisant Backbone.js et que vous voulez utiliser le Guidon pour les vues contrôlées par la colonne vertébrale. Le problème est que parce que ces pages sont déjà rendus dans le cadre de Guidon, quand j'essaye d'utiliser le Guidon à l'intérieur (ou le Guidon dans le Guidon) il ne fonctionne pas. Il n'y a pas des erreurs, il suffit juste de ne pas remplacer les balises de données.
Quelqu'un a rencontré ce avant ou d'avoir une quelconque idée d'un travail autour?
Merci!
Vous devez vous connecter pour publier un commentaire.
Ouais, c'est un problème épineux --- un peu comme la citant des problèmes dans des scripts shell qui deviennent un des rats nid de cité entre guillemets.
Ma solution est d'utiliser de jade (la haml) dans expressjs (côté serveur) à la sortie de guidon en fonction des modèles pour le client. De cette façon, le serveur utilise une syntaxe (jade), et le client utilise un autre (guidon). Je suis dans le même carrefour que vous, j'ai le même défi.
Bien sûr, jade n'est pas indispensable (même si il est prêt pour expressjs). Vous pouvez choisir n'importe quel (non-guidon) moteur de template pour le serveur, et/ou vous pouvez utiliser le guidon sur le serveur avec votre non-guidon de template sur le client --- aussi longtemps que les deux syntaxes de votre choix de template moteurs ne sont pas en collision. Depuis que je suis en utilisant emberjs sur le client et il utilise le guidon de la syntaxe (par défaut), je préfère utiliser emberjs + guidon de syntaxe sur le client. Donc expressjs + jade est devenu un choix naturel pour le serveur.
Vous devriez utiliser les pré-compilé des modèles client. Ils sont plus rapides d'exécution et de vous permettre d'utiliser le même modèle de langue sur le serveur et le client.
npm install handlebars -g
handlebars client-template1.handlebars -f templates.js
<script src="templates.js"></script>
var html = Handlebars.templates["client-template1"](context);
https://stackoverflow.com/a/13884587/8360
Un moyen facile de le faire est de simplement ajouter un
\
avant la{{
dans un Guidon de fichier. Par exemple:Le code ci-dessus sera rendu sur le client avec le {{..}} préservation des balises.
Éhontée de l'auto-promotion!
J'ai voulu faire ce même client/serveur de partage de chose, j'ai donc écrit un petit package npm pour aider:
nœud-guidon-précompilateur
Je fouettée dans une couple d'heures basé sur le compilateur de ligne de commande dans wycats' guidon repo. Ce n'est pas le plus grand de code dans le monde, mais c'est fait pour moi, très bien.
EDIT: je ne suis plus le maintien de ce package. Si vous souhaitez prendre des cours, veuillez me contacter via Github. Je l'utilise principalement Jade modèles de maintenant, il ne fait pas de sens pour moi de continuer en tant que responsable.
J'ai travaillé autour de cette en passant à côté client par le biais de modèles de serveur-côté des modèles.
Donc sur le côté serveur pour lire tous vos côté client des modèles à un tableau et de le passer à votre fonction rendu sur le côté serveur
Dans votre gestionnaire d'itinéraire faire quelque chose comme:
Puis dans la mise en page.hbs:
Ici, je suis en utilisant les noms de fichiers sans extensions que l'id du modèle de sorte qu'ils peuvent être référencées à partir de la Dorsale points de vue. Oh, et n'oubliez pas de mettre en œuvre la mise en cache pour le mode de production.
Ouais, ça craint.
Je pense que nous devrions écrire un Guidon/Express/se Connecter aide pour cela.
Vous avez 2 options. La deuxième est LA meilleure façon de le faire:
1) Échapper à la moustache
2) Précompiler
Vous compilez le modèle sur le serveur avant qu'il ne passe au client. Cela permet de rendre le modèle prêt à l'emploi et à réduire la charge sur le navigateur.
Je n'aimais pas la précompilation solution (parce que je veux définir des modèles dans le même fichier dans lequel je vais les utiliser), ni de la naïveté
\{{
échapper à la solution (car il a besoin du plein Cintre et d'un compilateur code javascript) alors je suis venu avec une solution hybride qui utilise le Guidon " aidants:1) Inscrire une nouvelle aide appelée "modèle" sur le serveur de configuration
2) Utiliser n'importe où dans votre côté client sur une page web (avec
\{{
échapper à côté client paramètres)(le serveur de précompiler dans quelque chose de ce genre)
3) il suffit d'appeler la fonction où vous en avez besoin en javascript côté client