0

我将一些 JSON 数据传递给 Jade 模板,但似乎无法将 JSON 数据打印到我的 Jade 模板。这是存储并传递给 Jade 模板的 JSON 示例:

{ name: 'Team 1',
  _id: 5134d71192cf972226000003,
  __v: 0,
  key: 1362417425623 }

它像这样传递给 Jade 模板:

res.render('tournamentDetails', { 'tournamentData' : tournamentData, seedsSerialized : JSON.stringify(tournamentData.teams) } );

Jade 模板的格式为:

script(type='text/javascript')
                var seeds = [#{tournamentData.teams}];

我正在尝试seeds在单独的 JavaScript 文件中访问此变量,但似乎无法访问它们。我一直在测试alert用于测试 JavaScript 文件中种子中的内容,而不是团队。

这也是从 Jade 生成的 HTML:

var seeds = [{ name: 'Team 1',
  _id: 5134d71192cf972226000003,
  __v: 0,
  key: 1362417425623 },{ name: 'Team 2',
  _id: 5139dc66b48da58d0e000001,
  __v: 0,
  key: 1362746470498 },{ name: 'Team 3',
  _id: 5139dda45f1598440f000001,
  __v: 0,
  key: 1362746788314 },{ name: 'Team 4',
  _id: 513b2c66cfd50dce11000001,
  __v: 0,
  key: 1362832486554 }];

如何访问 JavaScript 文件中的团队?我想将 的输出namesteamsJade 模板。

4

1 回答 1

1

这可能不是一个确切的答案,但评论太长了......

看看这个jsfiddle:http: //jsfiddle.net/KvXTA/

var seeds = [{ name: 'Team 1',
  _id: 5134d71192cf972226000003,
  __v: 0,
  key: 1362417425623 },{ name: 'Team 2',
  _id: 5139dc66b48da58d0e000001,
  __v: 0,
  key: 1362746470498 },{ name: 'Team 3',
  _id: 5139dda45f1598440f000001,
  __v: 0,
  key: 1362746788314 },{ name: 'Team 4',
  _id: 513b2c66cfd50dce11000001,
  __v: 0,
  key: 1362832486554 }];

console.log(seeds);

注意控制台如何输出

Uncaught SyntaxError: Unexpected token ILLEGAL

那是因为 _id 字段。我很惊讶你说序列化版本有同样的问题,因为它应该用引号括住 ID。如果您根本不需要 ID,您可以使用替换功能在序列化版本中删除它们。

var seedsSerialized = JSON.stringify(teams, function (key, val) {
    return key === '_id' ? undefined : val;
);
res.render('tournamentDetails', { seedsSerialized: seedsSerialized });

然后使用该序列化版本seeds在模板中进行初始化。

script
    var seeds = !{seedsSerialized};

我之前关于包含脚本的顺序的评论并不是担心另一个文件正在创建种子变量,而是您可能已经包含了seeds之前seeds实际声明过的文件。

例如:

<script src='logSeeds.js'></script>
<script>
    var seeds = [ ... ];
</script>

其中 logSeeds.js 是:

console.log(seeds);

显然会输出undefined,因为seeds尚未声明。这只是一个想法,不一定是你的情况。

于 2013-04-11T19:49:28.590 回答