nodejs jade estensione condizionale

Mi piacerebbe che la mia pagina Jade estendesse layout diversi, a seconda delle condizioni. Quindi il mio codice assomiglia a questo:

if myConditionVariable extends layout1 else extends layout2 block content p here goes my content! 

Ora questo non funziona. Sembra che solo le ultime estensioni definite saranno rispettate, indipendentemente dalle condizioni. Ho anche provato a definire dynamicmente il templatename, ad esempio

 extends myLayoutNameVariable 

e impostare myLayoutNameVariable in diversi modi (esprimere la funzione di helper dynamic, impostarla come var, var locale ecc …)

C’è qualche altra soluzione per i layout condizionali o qualcuno può dirmi cosa sto facendo di sbagliato?

Saluti, Simon

    Questo sembra essere un problema che è ancora aperto su github .

    Quindi, un modo leggermente meno intrusivo per gestire questo è cambiare il layout stesso.

    Ho aggiunto un po ‘di middleware e il resto scorre ..

     app.use(function(req, res, next){ res.locals.isAjax = req.headers['x-requested-with'] && req.headers['x-requested-with'] === 'XMLHttpRequest'; next(); }); 

    Ora che è impostato, “isAjax” è disponibile per jade.

    Nel mio “layout.jade” (il modello che estenderai da ), faccio questo:

     - if(!isAjax) doctype 5 html head body block content block scripts - else block content block scripts 

    Ho spogliato gli altri elementi dell’intero layout.jade per chiarezza (si spera).

    Infine, le mie normali visualizzazioni che estendono layout.jade funzionano senza modifiche (questo modello di giada include entrambi i casi).

     extends layout.jade .container. This is text will be wrapped for a non-ajax request, but not for an ajax request. 

    Spero che non sia troppo tardi, ma ho trovato questo problema e penso di aver trovato una soluzione:

    1. Crea un layout.jade che condizionalmente include entrambi i layout:

       layout.jade: if conditionalVariable include firstLayout.jade else include otherLayout 
    2. Nella tua vista, estendi layout.jade e definisci variabile conditionalVariable nel controller ( true / false ):

       view.jade: extends layout block content p here goes my content! 
    3. Disco !

    Puoi fare qualcosa come:

     if myConditionVariable p test 

    ?

    In caso contrario, si passa la myConditionVariable corretta quando si dice di eseguire il rendering di quella vista? Un breve esempio per questo:

     app.get "/", (req, res) -> res.render "index", myConditionVariable: true