2013-08-05 2 views
5

Je travaille avec Node.js et express. Supposons que j'ai une paire de fichiers de jade:Rendre un seul bloc en jade

template.jade

html 
    body 
    block page-content 

example.jade

extends template 
    block page-content 
     p 
      | Lorem ipsum yadda yadda 

Si je rends example.jade, je vais le résultat de brancher ce paragraphe tag dans l'étiquette du corps de template.jade, qui est normalement ce que je voudrais. Mon problème est que j'essaie d'utiliser pushState et l'API History pour charger ces fichiers (enfin, pas ces fichiers), et quand je le fais, je veux une requête qui retourne juste le contenu du fichier. le contenu de la page se bloque lui-même, sans le reste du document html complet. Existe-t-il un moyen simple de dire à Jade de simplement rendre le bloc lui-même et de ne pas l'intégrer dans le modèle?


Le mieux que je pouvais trouver était le changer pour être:

example.jade

extends template 
    block page-content 
    import example-content 

exemple-content.jade

p 
    | Lorem ipsum yadda yadda 

Mais il semblait hackish pour créer des fichiers supplémentaires comme celui-ci.

Répondre

0

Jade prend en charge le code exécutable. Quand utilisé préfixé - (sans tampon). Par exemple, vous pouvez utiliser si statment dans le principal modèle de jade de mise en page:

- if (renderType && renderType == 'page') { 
    doctype 5 
    html 
     head 
     title= title 
     body 
- } 
     block content 

Render page html comme:

res.render('index', { title: 'StackOverflow', renderType: 'page' }); 

Render bloc html comme:

res.render('index', { title: 'StackOverflow', renderType: 'block' }); 

Et si vous ne ne pas utiliser renderType variable dans toutes les expressions de rendu, utilisez

res.locals(obj) //*Assign several locals with the given obj. The following are equivalent:* 

et de définir la valeur par défaut pour toutes les demandes. Si vous init application gestionnaire ajouter:

var logger = function(req, res, next) 
{ 
    res.locals({renderType:'page'}); 
    next(); 
}; 

app.use(logger); 
+0

Je ne pense pas qu'il y ait une façon d'inclure conditionnellement la ligne « étend modèle »; mettre deux géants si des blocs dans mon fichier de modèle semble douloureux. – Retsam

Questions connexes