【问题标题】:Scope of exported variable in express and jadeexpress和jade中导出变量的范围
【发布时间】:2014-02-06 08:29:09
【问题描述】:

我在 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 未定义。我认为这与客户端/服务器端变量之间的差异有关。如果是这种情况,是否有办法让客户端范围可以访问服务器端变量?

【问题讨论】:

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


    【解决方案1】:

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

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

    为了实现您想要做的事情,您应该在脚本块中定义一个函数,该函数可以从您的按钮 onclick 处理程序中调用。注意确保您的脚本关键字以 .以便以下行被视为脚本的块内容。

    你的模板应该是这样的。

    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' }]  
    };
    

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

    【讨论】:

    • 我的对象是动态生成的,如何实现你回答的第二部分?
    • 你的意思是你的对象是一个字符串? JSON.parse(string)
    • 我犯了一个大罪:在尝试之前先问一个问题。它工作正常。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    相关资源
    最近更新 更多