【问题标题】:Best way to handle Javascript rendering vs. Server side template [duplicate]处理 Javascript 渲染与服务器端模板的最佳方法 [重复]
【发布时间】:2012-12-18 21:05:21
【问题描述】:

可能重复:
Reusing backbone views/routes on the server when using Backbone.js pushstate for seo/bookmarking

我正在使用 Backbone.js 和一堆其他模块来处理 Single Page App 方法。我的目标:

  1. 网站必须是 SEO 友好的

  2. 服务器引导 html 代码到客户端和存储在 JSON 模型中的数据。

  3. 子序列动作全部由 Javascript 处理(例如渲染新屏幕,使用 Backbone 路由器更改 url)。

我的问题是如何构建服务器以与每个路由器 url 上的 Javascript 保持一致并保持它DRY

例如:如果用户去wwww.mysite.com然后点击某个链接去www.mysite.com/page/2,那必须和让他先直接去www.mysite.com/page/2一样加载。

这似乎是一个老话题,但我找不到任何可靠的资源来说明在服务器端处理此问题的最佳方法,而无需在 Javascript 中重复模板代码。

我正在考虑的一个选项是将后端拆分为 Node.js 和另一台服务器以仅处理 API。 Node.js 服务器以某种方式共享模板构建代码作为 Javascript 前端

无论如何,如果这里不适合提出此类问题,我很乐意听到一些建议和道歉。

【问题讨论】:

  • Socket.io 是个有趣的想法。我必须在那里做更多的研究。但是在 hashbang 一上,我从我的专家朋友那里得到了很多建议,让我远离 hashbang 并坚持使用 pushState。我也更喜欢 pushState,而 Twitter 似乎已经远离它 news.ycombinator.com/item?id=3614037

标签: node.js model-view-controller backbone.js template-engine singlepage


【解决方案1】:

我会将我的节点服务器视为我的数据的 REST 接口。然后我会在客户端处理其他所有事情:我可以使用require.jsjade 之类的模板插件加载模板,使用Backbone.Router 完成所有路由,然后使用Backbone.sync 方法访问我的模型和集合(比如collection.fetch().)

例如,当用户访问“mysite.com/#page/2”时,我可以让我的 Backbone 路由器加载并显示页面上的任何模板。如果我碰巧需要在该页面上显示产品列表,那么我可以让我的product 集合做一个product.fetch()。这会将 GET 请求发送到“/products”——或product.url 中指定的任何 URL。然后,我的节点服务器将响应一组产品对象,我的集合所属的视图可以用于呈现自身。

【讨论】:

  • 因此,jade 是 node.js 的后端模板。假设我们有一个列表和一个按钮来添加项目。我使用默认项目列表加载页面,然后使用 Javascript 前端动态添加新项目。我可以做 POST 来更新后端,但是在前端,我仍然设法获取每个项目的模板以添加每个项目。当用户直接进入列表页面时,这段前端模板管理代码会与后端部分重复。当然这是一个简单的例子,但希望你能看到我的担忧。
  • 如果你使用 requirejs 插件,Jade 可以用来在前端生成模板(看看我为插件发布的链接。)
猜你喜欢
  • 2017-09-08
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
  • 2017-09-08
  • 1970-01-01
  • 2021-08-05
  • 2023-04-09
相关资源
最近更新 更多