将json数组传递给jade渲染页面中的javascript函数

时间:2017-02-15 11:07:10

标签: javascript pug

我将json数组传递给jade模板。

然后,此模板将运行数组,将行添加到html输出。

然而新的要求不需要将json对象传递给javascript函数,所以我尝试了:

- var json = JSON.stringify(rows);
input.medium.success.button.error(type='submit', id='update_details', value= sendCommandLabel, onclick='sendCommand(' + json + ')')

给出以下输出(从简洁中省略完整数组):

<input type="submit" id="update_details" value="Send Command" onclick="sendCommand([{&quot;id&quot;:&quot;id1;,&quot;param1&quot;:value1, ... &quot;}])">

哪个没用,因为我想在javascript函数中使用这个输出,因为它不能消耗它。

我希望我遗漏一些简单的东西,因为我的另一个选择是通过循环渲染渲染器中的对象重新创建json数组来重新创建它!

UPDATE :我修改了代码,所以不是将数组传递给函数,而是在编译jade页面时将数组硬编码到函数中。所以这个:

    function sendStopCommandToAllSensors()
    {
        var hardcode = !{JSON.stringify(rows)};

成了

    function sendStopCommandToAllSensors()
    {
        var hardcode = [{"id":"id1", ... }, {"id":"id2", ... }];

但那仍然无效。

令人费解地在其中添加了几个简单的alert s表明存在正确数量的对象(后来通过将结果字符串直接剪切并粘贴到代码中然后手动添加第三个对象来确认)。

    alert(hardcode.length);     // displays 2
    alert("rows: " + hardcode); // displays [object Object],[object Object]

这就是为什么在

之后的循环中
    for (var row in hardcode)
    {
        alert("row: " + row); // displays 0 or 1, not an object

        if (row.active == 1)
        {
            alert("Reached here"); // never reached

永远不会到达最后一行。

更新II :通过stringify hardcode我可以输出人类可读的json。

alert("rows: " + JSON.stringify(hardcode));

为什么代码似乎没有正确解析数组,我该怎么做呢?

更新III :我现在通过使用两步传统循环和分配来实现它。

        for (var i=0; i<rows.length; i++)
        {
            var row = rows[i];

现在问题似乎是,为什么for..in循环没有按预期工作?

1 个答案:

答案 0 :(得分:0)

我是新手,但我认为我遇到了类似的问题。

但是我对JSON.stringify方法完全没问题,这是你的第一个解决方案。它在生成的hmtl中看起来很难看,但我觉得它在我的情况下很有用。 至少我认为我理解正确,你并没有试图做一些我能吸收的魔法。

如果

rows=[{id:id,param:param},{id:id2,param:param2}]

JADE:

- var json = JSON.stringify(rows);
input(type='submit', onclick='myFunction(' + json + ')')    

JS:

function myFunction(myRows) {  
  console.log(myRows[0].id);
  console.log(myRows[0].param);
  console.log(myRows[1].id);
  console.log(myRows[1].param);
  .
  .

至少我正在做的事情还可以。

我希望我没有写过一堆废话:)