我的网络应用程序有一个主玉模板,其中包含需要在应用程序的每个页面上加载的所有主要组件。其中一个组件是导航栏,我将其拆分为另一个模板。此导航栏的下拉列表需要从数据库动态填充。
我遇到的问题是我想在导航栏被渲染时填充下拉列表。因为我使用了带有nodeJS的express 4.0,所以我想到了使用一个辅助函数,它可以直接从导航栏模板中填充列表。因为此函数是异步的,导航栏会在从数据库中检索下拉项之前呈现自己。
我还想过在页面加载时使用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*})
数据特别与应在此特定视图上呈现的内容相关,而不一定与主数据库所需的内容相关。我也不想传递导航栏项目。
答案 0 :(得分:3)
AJAX对于导航栏似乎不切实际。
您可以使用中间件填充本地对象
app.use(function(req,res,next){
res.locals.list = [...];
// or
app.locals.list = [...];
next();
});