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



我有一个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", ... }];

但这仍然没有奏效。

令人困惑的是,在其中添加几个简单的alerts表明存在正确数量的对象(后来通过将生成的字符串直接剪切并粘贴到代码中,然后手动添加第三个对象来确认存在)。

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

最后一行永远不会到达。

UPDATE II:通过stringifyhardcode,我可以输出人类可读的json。

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

为什么代码似乎没有正确解析数组,我需要做些什么来纠正它

UPDATE III:我现在通过使用两步传统循环和赋值来实现它。

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

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

我是新手,但我想我也遇到过类似的问题。

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

如果

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

翡翠:

- 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);
.
.

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

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

最新更新