Jade template “ogni” funzione restituisce oggetto vuoto
Domanda
Ho avuto un bug che è stato bugging me per giorni. Sono abbastanza nuovo per nodo e il sistema di template di Giada modo da portare con me: sto cercando di aggiungere fogli di stile nel seguente modo:
App.js (espresso):
app.get('/', loadUser, function(req, res) {
var User = req.user;
// console.log(User.groups[2]);
// var groups = User.groups.split(',');
// OK DUh. This only gets called when the client has the script Socket.IO
// and client runs socket.connect()
getMessages(User, function(messages) {
var locals = {
scripts: [
'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js',
'index.js'
],
stylesheets: [
'index.css'
],
user : User,
messages: messages
};
console.log('ok');
res.render('app.jade', {locals : locals});
});
});
In layout.jade (che viene eseguito con app.jade) ho:
!!! 5
html
head
title UI
link(rel='stylesheet', href = 'stylesheets/reset.css')
link(rel='stylesheet', href = 'stylesheets/layout.css')
- var stylesheets = stylesheets || [];
#{stylesheets}
- each stylesheet in stylesheets
- if(stylesheet.indexOf('http') >= 0)
link(rel='stylesheet', href = stylesheet)
- else
link(rel='stylesheet', href = "stylesheets/"+stylesheet )
Inoltre altro ... io continuo a correre nello stesso errore:
9. ' - if(stylesheet.indexOf(\'http') >= 0)'
Object function () {
var o = {}, i, l = this.length, r = [];
for(i=0; i
for(i in o) r.push(o[i]);
return r;
} has no method 'indexOf'
Ora .. il punto è che questo esatto opere di modelli in un'altra applicazione che passa nella stessa identica variabili: Vorrei davvero apprezzare qualsiasi suggerimento voi ragazzi hanno su questa spinosa questione
Grazie! Matt Mueller
Soluzione
Quindi, ecco il tuo problema ...
in questa linea:
res.render('app.jade', {locals : locals});
si passa in locali ==> gente del posto, che è un hash (ok, quindi sono un ragazzo PERL, penso JS chiama 'array associativi' li)
Così ora all'interno del vostro modello di giada abbiamo la riga:
- var stylesheets = stylesheets || [];
all'interno JADE, è stato definito il "locali" variabili, ma tutto il resto è nascosto sotto che, in modo che le variabili "fogli di stile" non è definito (locals.stylesheets è definito invece). Quindi questa riga di codice imposta i "fogli di stile" variabili a "[]"
Quindi, ecco dove devo speculare. "IndexOf" è un metodo dell'oggetto Array. Forse array costruiti all'interno JADE non hanno questo metodo mentre gli array costruiti node.js associ questo metodo. Il che spiegherebbe perché si ottiene un errore nel tentativo di chiamare "stylesheets.indexOf (...)"