У меня есть сервер node.js, написанный на экспрессе, и в определенный момент я отправляю на какую-то страницу .jade массив. Проблема в том, что при рендеринге страницы Jade компилятор Jade отображает массив как [object Object]
, а компилятор JavaScript в Chrome жалуется на это, говоря «Неожиданный идентификатор».
Это код Джейда:
!!! 5
html(lang="en")
head
title= "Rankings"
body
h1 Ranking
div(id="rankings")
script(type='text/javascript')
function fillRanking(){
var rankArray = #{ranking};
alert("inside fillranking");
var divElement = document.getElementById("rankings");
for(var i = 0; i< rankArray.length; i++){
divElements.innerHTML += "" + i+1 + ". " + rankArray[i].Username + " " + rankArray[i].Points;
}
}
fillRanking();
Как видите, это очень просто: я просто заполняю div информацией, содержащейся в переменной #{ranking}
, передаваемой node.js в Jade. Оповещение во второй строке не срабатывает, потому что ошибка Unexpected Identifier возникает, как только я пытаюсь присвоить переменную #{ranking}
.
Ниже приведен код в моем node.js с экспресс
app.get('/ranking', function (req, res) {
//get the first ten people in the ranking
var firstTen = getRanking(10, function(results){
//compute the array of results
var result = {
ranking: [],
}
for(var i = 0; i < results.length; i++){
result.ranking[i] = results[i];
}
//render the ranking with all the info
console.log(result);
res.render(__dirname + '/pages/ranking/ranking.jade', {
ranking: result,
});
});
});
Я создаю объект внутри массива результатов, помещаю в него результаты, полученные из запроса, и передаю их механизму рендеринга. Вызов console.log(results)
правильно печатает объект result
, например так:
{ ranking:
[ { Username: 'usr1',
_id: 4ed27319c1d767f70e000002,
Points: 100 },
{ Username: 'usr2',
_id: 4ed27326c1d767f70e000003,
Points: 100 } ]
}
Я действительно не знаю, как обращаться с переменной, переданной на страницу Jade. Что бы я ни делал, я продолжаю получать ошибку «Неожиданный идентификатор». Кто-нибудь из вас знает, как мне это решить?
Спасибо
{ranking: JSON.stringify(result)}
. Чтобы было ясно, это не оптимально. Построение списка как части шаблона с использованием функциональности Jade «Итерация» полностью избавляет браузер от необходимости выполнять для этого JavaScript. - person Ryan Olds   schedule 28.11.2011var rankArray = JSON.stringify(#{ranking});
снова дает непредвиденную ошибку идентификатора. То же самое происходит сvar rankArray = {ranking: JSON.stringify(#{ranking})};
. Я до сих пор не понимаю, как построение списка непосредственно в HTML позволит избежать ошибки JavaScript, которую я получаю, поскольку каждый раз, когда JS пытается оценить#{ranking}
, он выдает ошибку. - person Masiar   schedule 28.11.2011