【问题标题】:Where to "build" the content for a sidebar?在哪里“构建”侧边栏的内容?
【发布时间】:2011-10-22 19:25:51
【问题描述】:

我目前正在使用 express 创建我的新网站。该页面分为不同的“部分”(例如博客、有关我的项目的信息等)。 我想在我的内容旁边有一个“sidebare”,每个部分都不同。例如,在“博客”部分 id 喜欢有一个我的标签或类别的列表,而在项目部分应该有一个所有项目的列表。内容取决于章节,并且对于本章节的每个“子部分”都是相同的。

一种解决方案是创建一个创建侧边栏内容的函数,并在每个处理路由的函数中调用此函数。但我不喜欢这个解决方案,因为它似乎不是“正确的”......

有人对此有很好的解决方案吗?

【问题讨论】:

  • 我不明白这个问题。通常你会把侧边栏放在你的 HTML 模板中——或者如果你需要动态生成它,可以放在一些模板引擎中。
  • “问题”是创建侧边栏内容的函数(当然)是异步的,因为我必须从数据库中获取数据。所以一个简单的“视图助手”是做不到的。
  • “当然”?我认为你有太多隐含的假设。我不明白你描述的情况。买一只橡皮鸭。用鸭子能理解的方式向它解释你想要做什么。然后修改您的解决方案 - en.wikipedia.org/wiki/Rubber_duck_debugging

标签: javascript model-view-controller node.js express


【解决方案1】:

如果我正确理解您的问题,您想知道如何使用相同的整体模板呈现多个“部分”,是吗?每个部分可能因页面内容和主 URL 而异。

我可以建议两种方法: 1) 恕我直言,正确的方式 - 定义一个基本模板(如果您使用的是 jam/express,请说 index.jade),然后您将使用该模板为主页 (/) 和博客页面 (/blog) 创建路由:

# Home Page
app.get '/', (req, res) ->
  # Do some simple DB transactions, etc, and get the main area content.
  res.render 'index.jade', { json: json }

# Blog Page
app.get '/blog/:id', (req, res) ->
  blog.grabPost req.params.id, (json) ->  # Grab content of the blog post from the DB
    res.render 'index.jade', { json: json }

接下来,为其余内容创建一些“部分”网址:

# Sidebar Partial
app.get '/sidebar/:page/:id', (req, res) ->
  sidebar.grabContent req.params.id, (json) ->
    res.render '{#req.params.page}.jade', { json: json }

然后您可以通过 JQuery 在页面加载时调用部分客户端,如下所示:

$ ->
  $('.sidebar').load '/sidebar/blog/365' + id, (response, status, xhr) ->

2) 使用我不太熟悉的 Express 'view partials'。文档可以在这里找到:http://expressjs.com/guide.html#view-partials

从描述中:“Express 视图系统内置了对部分和集合的支持,它们是代表文档片段的“迷你”视图。例如,我们可以使用部分集合而不是在视图中迭代以显示 cmets :"

【讨论】:

  • 您好,谢谢您的回答!部分的问题(据我了解)是您不能使用异步。生成其内容的函数。 AJAX 解决方案是可能的,但.. 我不知道我是否喜欢它,因为目前我的网站不需要客户端 JavaScript 才能工作。我不喜欢需要 javascript 的“简单”网站。
  • 嗯,我使用异步函数在我的应用 Booklist 中生成部分内容,请查看:github.com/bdickason/booklist/blob/master/app.coffee#L75
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多