我正在尝试使用存储在MongoDB中的d3来显示某些数据。我的问题是通过JADE模板为每个数据创建div
元素的最佳实践,然后调用方法绘制不同的图表。
我的主要问题是在显示HTML文件后我丢失了对数据的引用,我不想第二次查询数据库。
架构
# Create Schema
executionSchema = new Schema(
timestamp: Number,
components: [{
uid: String,
type: { type: String },
samples: [Number],
execution_times: [Number]
}]
)
最初检索数据并将其提供给JADE模板:
指数咖啡
exports.index = (req, res) ->
Execution.find (err, executions, count) ->
res.render "index", title: "Debugger", executions: executions
return
return
Afterwads,index.JADE为执行内的每个divs
创建component
[0]
- each component in executions[0].components
div(class="panel panel-primary")
div(class="panel-heading") UID: #{component.uid}
div(class="panel-body")
p(style='white-space:pre;')
| Type: #{component.type}
- var uid = component.uid
div(id=uid)
这就是现在的一切,因为我无法在JADE文件之外调用JavaScript方法。任何想法?
谢谢。
答案 0 :(得分:1)
如果我理解正确,您希望这些数据在客户端脚本上可用,而不是第二次实际查询数据库吗?
这里有两种选择。第一个是在你现在的Jade代码旁边添加这一行:
- each component in executions[0].components
// div creation stuff here
// ...
script
window.executions = JSON.stringify(executions);
现在,您的客户端脚本将能够访问执行对象并访问这些数据:
var data = JSON.parse(executions);
不确定这是否有效。如果您不想第二次查询数据库,可能是因为数据集很大或db慢?
另外,使用单个数据库查询执行此操作的另一种方法是呈现没有div的页面,并且根本不查询数据库。然后使用Javascript获取执行(ajax调用),并在加载数据后将其呈现给客户端。
这取决于你的用例。