我的Web应用程序有一个翡翠主模板,其中包含需要在应用程序的每个页面上加载的所有主要组件。这些组件之一是导航栏,我已将其拆分为另一个模板。该导航栏有一个下拉列表,需要从数据库动态填充。
我遇到的问题是,我想在导航栏被渲染时填充下拉列表。因为我将Express 4.0与nodeJS一起使用,所以我想到了使用一个助手函数,该函数将从navbar模板中直接填充列表。由于此功能是异步的,因此导航栏会在从数据库中检索下拉项之前先呈现自身。
我还考虑过在页面加载中使用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*})
数据特别与应在此特定视图上呈现的内容有关,而不必与主文件所要求的内容有关。我也不想传递导航栏项目。
对于导航栏,AJAX似乎不切实际。
您可以使用中间件来填充本地对象
app.use(function(req,res,next){
res.locals.list = [...];
// or
app.locals.list = [...];
next();
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句