如何正确的使用JavaScript和Jade一起使用render中传入的参数

所以我的问题是关于链接到子Jade模板中的外部JavaScript文件的正确位置,并向这些JavaScript文件传递数据(如果这甚至可能?)。

所以我使用Express,并使用传入的数据来呈现我的Jade文件,如下所示:

router.get('/', function(req, res, next) { tflSentimentAnalysis.fetchTflSentiments(credentials, function(results){ res.render('twitterInsights', results); }); }); 

数据现在可以在我的twitterInsights.jade中使用

#{results.attributeName}

我有一个非常简单的Jade文件,它从Jade模板延伸,如下所示:

 extend layout block content h2 Title of page p Page contents will go here 

我需要包含2个JavaScript文件。 首先是bower_components中的D3.js库,其次是public / javascripts中我自己的JavaScript文件。

 script(src="/bower_components/d3/d3.min.js") script(src="/public/javascripts/twitterVisualisation.js") 

玉石模板中链接到JavaScript文件的最佳位置在哪里?

我的JavaScript文件(twitterVisualisation.js)需要在渲染时将数据传递给jade。

将这些数据传递给JavaScript文件的最好方法是什么?

我一直在寻找这个答案,并且很惊讶这不是一个常见的问题。 提前致谢。

一种可能性:

 extend layout block content script. var results = !{JSON.stringify(results)}; h2 Title of page p Page contents will go here script(src="/bower_components/d3/d3.min.js") script(src="/public/javascripts/twitterVisualisation.js") 

基本上, results Jadevariables呈现为一个JSONstring,并放置在一个results客户端JSvariables,您可以使用从其他脚本(S)。 我通常不喜欢自己做(除非必须),因为它会创build一个全局variables( results )。

这取决于twitterVisualisation.js的内部,如果有更好的方法。 例如,如果该文件具有您调用的函数,则可以将其重写为如下所示:

 extend layout block content script(src="/bower_components/d3/d3.min.js") script(src="/public/javascripts/twitterVisualisation.js") script. twitterVisualisationFunction( !{JSON.stringify(results)} ); h2 Title of page p Page contents will go here 

您呈现结果并加载其他JS文件的顺序取决于哪种方法最适合您的其他代码。