我在使用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未定义。我认为这与客户端/服务器端变量之间的差异有关。如果是这种情况,那么无论如何都要使客户端范围可以访问服务器端变量吗?
答案 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' }]
};
这允许变量用于服务器端脚本(如果需要)以及客户端。