【发布时间】:2014-12-13 17:30:48
【问题描述】:
我的网络应用程序有一个玉石主模板,其中包含需要在应用程序的每个页面上加载的所有主要组件。其中一个组件是导航栏,我已将其拆分为另一个模板。此导航栏有一个需要从数据库动态填充的下拉菜单。
我遇到的问题是我想在呈现导航栏时填充下拉列表。因为我在 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*})
数据具体与应在此特定视图上呈现的内容相关,而不一定是主视图所需的内容。我也不想传入导航栏项目。
【问题讨论】:
-
每个用户的导航栏是否不同?是否取决于某些状态?
-
显示你的服务器上的渲染调用和你传递的变量。
-
@bebraw 现在每个用户都使用相同的导航栏。我还没有合并会话或任何东西。
-
@ravi 更新了问题以显示示例渲染调用
-
@hebime 然后使用下面的解决方案,如果您有疑问,请使用 Express 中的 Google 中间件处理程序。
标签: javascript node.js express pug