【发布时间】:2011-11-28 08:44:49
【问题描述】:
我有一个用 express 编写的 node.js 服务器,并且在某个时刻我向某个 .jade 页面发送了一个数组。问题是在呈现 Jade 页面时,Jade 编译器将数组呈现为 [object Object],而 Chrome 上的 JavaScript 编译器抱怨它说“意外标识符”。
这是玉码:
!!! 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();
如您所见,这非常简单,我只需用 node.js 传递给 Jade 的 #{ranking} 变量中的内容提供的信息填充一个 div。第二行的警报不会触发,因为一旦我尝试分配 #{ranking} 变量,就会发生 Unexpected Identifier 错误。
以下是我的 node.js 中带有 express 的代码
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 页面的变量。无论我做什么,我都会不断收到“意外的标识符”错误。 有谁知道我该如何解决这个问题?
谢谢
【问题讨论】:
-
有什么理由没有让翡翠遍历数组并将列表构建为模板的一部分?在github.com/visionmedia/jade 搜索“迭代”。
-
嗯,这是另一种看待事物的方式。我明白你的意思,但你能提供一个你所说的例子来回答这个问题吗?我想看看您将如何做到这一点而不会导致“意外标识符”错误。谢谢
-
可以试试
{ranking: JSON.stringify(result)}。需要明确的是,这不是最优的。使用 Jade 的“迭代”功能将列表构建为模板的一部分,完全避免了浏览器为此执行 JavaScript 的需要。 -
执行此操作
var rankArray = JSON.stringify(#{ranking});再次出现意外标识符错误。var rankArray = {ranking: JSON.stringify(#{ranking})};也是如此。我仍然看不到直接在 HTML 中构建列表如何避免我得到的 JavaScript 错误,因为每次 JS 尝试评估#{ranking}它都会触发错误。 -
我上面的建议应该放在路由中,而不是模板中。