将数组从express传递到jade客户端javascript

将数组从express传递到jade客户端javascript,javascript,node.js,express,pug,Javascript,Node.js,Express,Pug,我有这个玉模板: html head script(type="text/javascript" src="https://www.google.com/jsapi") script(type='text/javascript') google.load("visualization", "1", {packages:["corechart"]}); google.setOnLoadCallback(drawChart); function

我有这个玉模板:

html
  head
    script(type="text/javascript" src="https://www.google.com/jsapi")
    script(type='text/javascript')
      google.load("visualization", "1", {packages:["corechart"]});
      google.setOnLoadCallback(drawChart);
      function drawChart() {
      var data = google.visualization.arrayToDataTable([
      ['Date', 'Tin_A' ],

       - each datapoint in myData
            "[" + datapoint.date + "," + datapoint.value + "],"

      ]);
      var options = {
      title: 'bla'
      };
      var chart = new google.visualization.LineChart(document.getElementById('chart_line'));
      chart.draw(data, options);
      }


  body
    h1= title
    #chart_line
我使用此调用在express/node.js中呈现jade模板:

app.get('/', function(req, res){
  sensors.findSensorAllData(2, 2, function (error,emps){
        console.log(emps);
        res.render('tmp', {
            title : 'Temperatures in a row',
            myData : emps
        });
    });
});
console.log(emps)
的输出为:

[ { _id: 524b8642028e167fb0e3661d,
    sensor_id: 2,
    value: 49,
    date: Tue Oct 01 2013 20:34:40 GMT-0600 (CST) },
  { _id: 524b863d028e167fb0e3661c,
    sensor_id: 2,
    value: 19,
    date: Tue Oct 01 2013 20:34:35 GMT-0600 (CST) } ]
在渲染occour之后,我希望jade模板中的javascrip中有值。。。但这行不通。我只得到相同的纯文本行,好像行
-myData
中的每个数据点都没有意义。。。我做错了什么?谢谢

---编辑: 如果我更换线路,一切正常

- each datapoint in myData
            "[" + datapoint.date + "," + datapoint.value + "],"


我认为您可能无意中注入了字符串而不是数组,因为括号中有引号:

- each datapoint in myData
        "[" + datapoint.date + "," + datapoint.value + "],"
我对Jade不太熟悉,但我认为您可能需要执行以下操作:

- each datapoint in myData
        [#{datapoint.date}, #{datapoint.value}],

另外,在您提供的有效示例数据中,您仅使用日期的年份部分,但是
datapoint.Date
属性的内容可能是完整的日期对象,我不确定这是否是您希望用于此用途的内容

查看此问题的精选答案,了解您试图做的事情为什么不起作用。()

基本上,只要点击script标记,就告诉Jade解析器以原始形式处理事情,而不做进一步的处理。您真正想做的是重做代码的脚本标记,如下所示:

- if (typeof(pins) != "object")
!= "<script type='text/javascript'>"
!=   "google.load('visualization', '1', {packages:['corechart']});
!=   "google.setOnLoadCallback(drawChart);
!=   "function drawChart() {
!=   "var data = google.visualization.arrayToDataTable([
!=   "['Date', 'Tin_A' ],"
- forEach datapoint in myData
  !=   "[" + datapoint.date + "," + datapoint.value + "],"

!=   "]);"
!=   "var options = {"
!=   "title: 'bla'"
!=   "};"
!=   "var chart = new google.visualization.LineChart(document.getElementById('chart_line'));"
!=   "chart.draw(data, options);"
!=   "}"
-if(引脚类型)!=“对象”)
!= ""
!=   “google.load('visualization','1',{packages:['corechart']});
!=“google.setOnLoadCallback(绘图图);
!=   “函数绘图图(){
!=“var data=google.visualization.arrayToDataTable([
!=“[‘日期’,‘日期’,”
-myData中的forEach数据点
!=“[“+datapoint.date+”,“+datapoint.value+”,”
!=   "]);"
!=“变量选项={”
!=“标题:'bla'”
!=   "};"
!=“var chart=new google.visualization.LineChart(document.getElementById('chart_line'));”
!=“图表。绘制(数据、选项);”
!=   "}"
试试这个,但我相当肯定它会起作用

PS:上面的链接(我相信)也清楚地说明了为什么前面的答案应该是错误的,因为你不能在Jade脚本标记中插入这种模板占位符。

丑陋警报:

script
  ...
  var data = google.visualization.arrayToDataTable(['Date', 'Tin_A' ].concat(!{JSON.stringify(myData.map(function(i) { return [ i.date, i.value ] })) }));

谢谢你的回答。这是非常好的了解,玉采取原始形式内脚本标签。我将使用这些信息来找到解决方案。还有一件事,
做了什么=
在您的示例中的意思是?@otmezger请查看“缓冲代码”/“非缓冲代码”部分下的说明/代码片段,其中显示了这些运算符的功能。
script
  ...
  var data = google.visualization.arrayToDataTable(['Date', 'Tin_A' ].concat(!{JSON.stringify(myData.map(function(i) { return [ i.date, i.value ] })) }));