【问题标题】:Progressive enhancement - Node.js, Backbone.js渐进式增强 - Node.js、Backbone.js
【发布时间】:2014-07-06 22:43:06
【问题描述】:

node.js 服务器有两个角色:

  • 带有前缀 /api 的路由上的 RESTFul API
  • 在其他路由上呈现网站页面 (/ /plans /features /terms ...)

目前,我的所有页面都呈现“正在加载页面...”,并结合 Backbone.router 启动时替换 DOM 的 Backbone 应用程序。

我想在用户到达页面时在服务器端构建网站页面,并在用户在网站上导航时让 Backbone 处理导航的下一部分。

我知道如何在服务器端执行此操作,但在客户端使用已构建的 DOM 加载页面时,Backbone.router 会加载然后替换 DOM,因为它不知道视图已经预加载。

如何在客户端修复它?

代码:

更新:新代码:https://gist.github.com/mathieug/d50c861e63dd647f1c2b
现在我需要在第一次加载时调用 runSlider 方法。

【问题讨论】:

  • 您也可以提供一些看法吗?
  • 当然,条款视图:pastebin.com/et1mrbLK
  • 我刚刚添加了主页视图

标签: javascript node.js backbone.js progressive-enhancement


【解决方案1】:

当您启动历史记录时,请确保传递{silent: true} 作为选项让 Backbone 知道您已经加载了一个完整的页面。这将防止路由器在视图已经预加载(第一次)时替换 DOM。

来自Backbone.js docs

如果服务器已经渲染了整个页面,并且您不希望在启动历史记录时触发初始路由,请传递silent: true

因此,您的代码应如下所示:

Backbone.history.start({pushState: true, silent:true});

【讨论】:

  • 很好,正是我想要的。但只是一个问题,我如何开始活动?例如在我的主页上,我有一个滑块,init 方法在 HomeView 中。使用 RequireJS 我无法访问任何视图。
  • 我不确定我是否真的理解这个问题。当您执行this.homeView = new homeView(); 时,其中homeView 是RequireJS 正在加载的HomeView,HomeView 上的initialize 函数将被调用。
  • 好的,我在 HomeView 中有一个滑块,它由方法 runSlider() 初始化。加载 HomeView 后,我需要调用此方法 runSlider()。我在渲染中调用它,但在第一次加载时不调用渲染(静音:真)。但是如果我在初始化时也调用它,它将在所有视图上调用(我的路由器在它的初始化中加载所有视图)。
  • 我更改了代码,现在我在路线中创建视图。因此,现在在第一次加载时,不再调用初始化方法。如何在 HomeView 上运行滑块?
  • gist.github.com/mathieug/d50c861e63dd647f1c2b如何在第一次加载时在 HomeView 上运行滑块?
猜你喜欢
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多