Backbone.history
History 作为全局路由服务用于处理 hashchange
事件或 pushState
,匹配适合的路由,并触发回调函数。 我们不需要自己去做这些事情 — 如果使用带有键值对的 路由,Backbone.history
会被自动创建。
Backbone 会自动判断浏览器对 pushState 的支持,以做内部的选择。 不支持 pushState
的浏览器将会继续使用基于猫点的 URL 片段, 如果兼容 pushState
的浏览器访问了某个 URL 猫点,将会被透明的转换为真实的 URL。 注意使用真实的 URLs 需要 web 服务器支持直接渲染那些页面,因此后端程序也需要做修改。 例如,如果有这样一个路由 /document/100
,如果浏览器直接访问它, web 服务器必须能够处理该页面。 趋于对搜索引擎爬虫的兼容,让服务器完全为该页面生成静态 HTML 是非常好的做法 ... 但是如果要做的是一个 web 应用,只需要利用 Javascript 和 Backbone 视图将服务器返回的 REST 数据渲染就很好了。
startBackbone.history.start([options])
当所有的 Routers 创建并设置完毕,调用 Backbone.history.start()
开始监控 hashchange
事件并分配路由。后续调用Backbone.history.start()
会抛出一个错误, 并且Backbone.History.started
是一个布尔值,指示是否已经被调用。
需要指出的是,如果想在应用中使用 HTML5 支持的 pushState
,只需要这样做:Backbone.history.start({pushState : true})
。如果你想使用pushState
的话, 对于那些本身不支持它的浏览器,需要用整页刷新代替, 您可以添加{hashChange: false}
到选项。
如果应用不是基于域名的根路径 /
,需要告诉 History 基于什么路径: Backbone.history.start({pushState: true, root: "/public/search/"})
当执行后,如果某个路由成功匹配当前 URL,Backbone.history.start()
返回 true
。 如果没有定义的路由匹配当前 URL,返回 false
。
如果服务器已经渲染了整个页面,但又不希望开始 History 时触发初始路由,传入 silent : true
即可。
因为在Internet Explorer中基于hash的历史记录依赖于<iframe>
,因此需要确定DOM已准备就绪后再调用 start()
。
$(function(){
new WorkspaceRouter();
new HelpPaneRouter();
Backbone.history.start({pushState: true});
});