首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将数组传递给JSON对象以进行Jade呈现

将数组传递给JSON对象以进行Jade呈现
EN

Stack Overflow用户
提问于 2011-11-28 16:44:50
回答 3查看 33.5K关注 0票数 15

我有一个用express编写的node.js服务器,在某个时刻,我向某个.jade页面发送了一个数组。问题是,当呈现Jade页面时,Jade编译器将数组呈现为[object Object],而Chrome上的JavaScript编译器抱怨说“意外的标识符”。

这是Jade代码:

代码语言: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}变量赋值时,就会发生意外标识符错误。

以下是我的带有express的node.js中的代码

代码语言:javascript
复制
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对象,例如:

代码语言:javascript
复制
{ ranking: 
   [ { Username: 'usr1',
       _id: 4ed27319c1d767f70e000002,
       Points: 100 },
     { Username: 'usr2',
       _id: 4ed27326c1d767f70e000003,
       Points: 100 } ] 
}

我真的不知道如何处理传递给Jade页面的变量。无论我做什么,我总是得到“意外的标识符”错误。你们有人知道我该怎么解决这个问题吗?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-18 19:31:04

看看上面的评论,并进一步调查,我发现以下是有效的:

在你的javascript (/controller)上使用这个:

代码语言:javascript
复制
...
res.render(__dirname + '/pages/ranking/ranking.jade', {
    ranking: JSON.stringify(ranking),
})
...

在jade模板上:

代码语言:javascript
复制
...
function fillRanking(){
  var rankArray = !{ranking};
  alert("inside fillranking");
...

这之所以有效,是因为!{}不执行转义。

票数 31
EN

Stack Overflow用户

发布于 2013-03-20 16:15:08

这对我很有效。

在服务器上对数组(实际上是任意的JSON对象)执行JSON.stringify操作,然后在客户端对其执行JSON.parse操作。

服务器端:

代码语言:javascript
复制
res.render(__dirname + '/pages/ranking/ranking.jade', {
    ranking: JSON.stringify(result),
});

客户端:

代码语言:javascript
复制
var rankArray = JSON.parse( !{JSON.stringify(ranking)} );
票数 10
EN

Stack Overflow用户

发布于 2014-12-14 01:12:58

因为我还使用控制器中的数组进行迭代,所以我这样做了:

代码语言:javascript
复制
res.render('template', pArrayOfData);

在jade代码中:

代码语言:javascript
复制
script(type='text/javascript').
            var _histData = !{JSON.stringify(pArrayOfData)};
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8293363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档