我的web应用程序有一个主jade模板,它包含了应用程序每个页面上需要加载的所有主要组件。其中一个组件是导航栏,我将其拆分为另一个模板。这个导航栏有一个下拉列表,需要从数据库中动态填充。
我遇到的问题是,我想在呈现导航栏时填充下拉列表。因为我在nodeJS中使用express 4.0,所以我想使用一个助手函数,直接从导航栏模板中填充列表。因为这个函数是异步的,所以导航栏会在从DB中检索下拉项之前呈现自己。
我还想过在页面加载中使用AJAX来填充它,甚至只是事先将下拉项传递到模板中,但我不想在控制器中的每个res.render()调用中都传递这个列表。
做这件事最好的方法是什么?
示例模板
master.jade:
doctype html
html(lang=en)
head
block title
body
#header
include navbar
block headerContent
#content
block content
navbar.jade:
... //nav code
li(class='dropdown')
a(href='#', class='dropdown-toggle', data-toggle='dropdown') List
span(class='caret')
ul(class='dropdown-menu', role='menu')
li
each val, index in list
a(href='#') val
系统中的典型页面只需扩展主模板并填充适当的标题和内容块。
谢谢!
编辑:
添加示例控制器以显示渲染调用
sampleController.js:
...some error checking
model.save(function(err, results) {
if (err)
res.render('view', {error: 'some error'})
else
res.render('view', {data: *formatted results obj*})
数据特别与应该在此特定视图上呈现的内容相关,而不一定是主视图所需的内容。我不想把导航栏的项目也传进来。
你可以使用一件中装来填充本地对象
app.use(function(req,res,next){
res.locals.list = [...];
// or
app.locals.list = [...];
next();
});