Джейд Шаблон «Каждая» функция возвращает пустой объект
Вопрос
У меня была ошибка, которая меня за несколько дней. Я довольно новый узел и система шаблонов нефрита, так что нести со мной: я ищу добавление таблиц стилей следующим образом:
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});
});
});
В Layout.jade (который выполнен с помощью app.jade) у меня есть:
!!! 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 )
Кроме того, больше ... я продолжаю в том же ошибке:
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'
Теперь .. gotcha - это то, что этот точный шаблон работает в другом приложении, который проходит в точно такие же переменные: я бы очень признателен за любые предложения, которые вы, ребята, имеете в этой тернистой проблеме!
Спасибо! Мэтт Мюллер
Решение
Так вот ваша проблема ...
В этой строке:
res.render('app.jade', {locals : locals});
Вы проходите в местных жителях ==> местных жителей, который является хэшем (хорошо, поэтому я парень Perl, я думаю, что JS называет их «ассоциативными массивами»)
Так что теперь внутри вашего шаблона нефрита у нас есть линия:
- var stylesheets = stylesheets || [];
Внутри нефрита вы определили переменную «местные жители», но все остальное скрыто под этим, поэтому вариабельная «таблицы стилей» не определена (помещения. Так что эта строка кода устанавливает переменную «таблицы стилей» на «[]»
Так вот где я должен спекулировать. «indexOf» - это метод объекта массива. Возможно, массивы, построенные внутри нефрита, не имеют этот метод, тогда как массивы, построенные в Node.js, имеют этот метод. Что объяснило бы, почему вы получаете ошибку, пытаясь назвать «stylesheets.indexof (...)»