在玉模板中的asynchronous调用

我的网站应用程序有一个主要的玉石模板,其中包含所有需要在应用程序的每一页上加载的主要组件。 其中一个组件就是一个导航栏,我已经将其分成了另一个模板。 此导航栏有一个下拉菜单,需要从数据库dynamic填充。

我遇到的问题是,我想填充下拉的时候,导航栏呈现。 因为我在nodeJS中使用express 4.0,所以我想使用一个辅助函数来直接从navbar模板中填充列表。 因为这个函数是asynchronous的,所以在从数据库中检索下拉菜单项之前,导航栏会自我渲染。

我也想过在页面加载上使用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*}) 

数据具体涉及应该在这个特定的视图上呈现的内容,而不一定是主人所要求的内容。 我不想在Navbar项目中传递。

AJAX对于导航栏似乎不切实际。

您可以使用中间衣来填充当地人的对象

 app.use(function(req,res,next){ res.locals.list = [...]; // or app.locals.list = [...]; next(); });