快递和玉器中出口变量的范围

时间:2014-02-06 08:29:10

标签: node.js express scope client-side pug

我在使用Jade和从路径导出的变量范围方面遇到了一些问题。这可能是一个明显的答案,但我的谷歌搜索能力让我失望。

在我的路线中,我有这段代码:

res.render('index', {title: "App",
                     csvData: json  // This is a json object
};

在我看来,我想在点击按钮时显示json对象的长度。我的玉看起来像这样:

extends layout
block content
  script
    -var test123 = csvData;
    -console.log(test123.length);
  div 
    button.btnCSV(onclick='console.log(test123)') Save As CSV

第一个console.log打印正确的长度,但是当我按下按钮时,它告诉我test123未定义。我认为这与客户端/服务器端变量之间的差异有关。如果是这种情况,那么无论如何都要使客户端范围可以访问服务器端变量吗?

1 个答案:

答案 0 :(得分:0)

我不确定您的示例如何使用前缀为 - 的脚本内容,这表示无缓冲的代码。运行服务器端并且不产生直接输出的JavaScript,因此您的内联脚本很可能是空的。

同样,你的onclick处理程序只是在服务器上编译一个字符串,这是你要报告的主要问题。

为了实现您要执行的操作,您应该在脚本块中定义一个函数,该函数可以从按钮onclick处理程序中调用。请注意确保脚本关键字以a结尾。以便将以下行视为脚本的块内容。

这是您的模板应该是什么样子。

extends layout
block content
  script.
    var test123 = !{JSON.stringify(csvData)};
    function printLength() { 
      console.log(test123.length);
    }
  div 
    button.btnCSV(onclick='printLength()') Save As CSV

然后在服务器端确保您返回一个实际的JavaScript对象或一个数组,而不是字符串表示......它应该看起来像这样

res.render('index', {title: "App",
                     csvData: [{ val1: 'value1', val2: 'value2' }]  
};

这允许变量用于服务器端脚本(如果需要)以及客户端。