Jade Templat „jeweils“ Funktion zurück leeres Objekt
Frage
Ich habe einen Fehler hat, die mich seit Tagen nervt. Ich bin ziemlich neu in Knoten und dem Jade Templatingsystem so Bär mit mir: Ich bin auf der Suche Stylesheets in der folgenden Art und Weise hinzuzufügen:
App.js (Express):
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 (die mit app.jade ausgeführt wird) habe ich:
!!! 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 )
Plus mehr ... Ich halte in den gleichen Fehler ausgeführt wird:
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'
Nun .. die gotcha ist, dass diese genaue Vorlage Arbeiten in einer anderen Anwendung, die vergeht, in den exakt gleichen Variablen: Ich würde wirklich zu schätzen Anregungen ihr auf diesem heiklen Thema haben
Danke! Matt Mueller
Lösung
Also hier ist das Problem ...
in dieser Zeile:
res.render('app.jade', {locals : locals});
Sie in Einheimischen vorbei ==> Einheimischen, die ein Hash ist (ok, so dass ich ein PERL Typ bin, denke ich, JS nennt sie 'assoziative Arrays')
So, jetzt in Ihrer Jade-Vorlage haben wir die Zeile:
- var stylesheets = stylesheets || [];
innen JADE, haben Sie die Variable „Einheimischen“ definiert, aber alles andere ist unter das versteckt, so dass die Variable „Stylesheets“ ist nicht definiert (locals.stylesheets definiert statt). Also diese Codezeile setzt die Variable „Stylesheets“ auf „[]“
Also hier ist, wo ich spekulieren müssen. „IndexOf“ ist ein Verfahren des Array-Objekt. Vielleicht Arrays innerhalb JADE aufgebaut haben nicht diese Methode während in node.js konstruiert Arrays DO diese Methode haben. Welche würde erklären, warum Sie einen Fehler versuchen „stylesheets.indexOf (...)“
nennen