首选客户端路由解决scheme?

我正在devise一个基于单页浏览器的Web应用程序。

JQuery已经在我的应用程序中使用了。 我目前正在计划使用KnockoutJS进行数据绑定和UIpipe理。 但是我过去使用过Backbone.js ,而且我对控制层提供的路由function印象非常深刻。

我还研究了一些基于JQuery的解决scheme,如pathjs,用于客户端路由。

如果有人能够为select合适的路由系统提供build议和指导,那将是非常好的。

由于KnockoutJS优秀的数据绑定function,我不愿意使用Backbone.js代替KnockoutJS

经过一番探索后,我find了解决办法。 @Eisenhauer Backbone的路由设施非常棒,但是如果我不使用Backbone。 正如我在我的问题中概述的,我已经使用KnockoutJS为我提供了一个客户端MVVM模型,所以它不是一个好主意,将一个额外的MVC实现在同一页面。

对于寻找独立路由解决scheme的人来说,pathjs是一个简单而优雅的解决scheme。

Crossroads.js是一个更灵活,function强大且独立的路由解决scheme, url为http://millermedeiros.github.com/crossroads.js/ 。 这是非常好的logging和真正强大,所以可以适应任何要求。

你可以使用历史API而不是hashbang方法?

  • 它允许您操纵显示给用户的URL。
  • 这意味着后退/前进工作明智。
  • 为页面添加书签明智地工作。
  • 在性能方面更好,因为如果用户刷新页面(或者从外部源点击链接到页面),则首次加载正确的内容,而不是必须加载空白页面,然后通过AJAX获取正确的内容。

缺点是旧的浏览器不支持它。 如果你真的需要的话,你可以使用hashbang方法。 我不知道任何现有的框架,虽然这样做。 我宁愿回头不dynamic加载内容(即当用户点击链接时重新加载整个页面)。 历史API将会得到越来越广泛的支持,所以这个“问题”会随着时间的推移而减less。

这是一个有关文档的工作示例 。 从地址栏看起来好像页面正在加载“旧学校”(整页刷新),但是如果你看一下控制台(Firebug,Chrome开发工具),你可以看到内容被抓取通过AJAX请求。

Mozilla有一些关于它的文档 。

也有优秀的导演

Crossroads.js似乎是最好的之一。 它的一个主要优点是,它不依赖于window.location进行路由。 它很轻,因为它坚持只做路由和路由。

其他你可能想要尝试的: finch.js , davisjs (基于pushState,这样你可以使用现有的链接作为后备,如果JS失败)

添加更新: 2015年3月30日 – 去年年底,我转移到了AngularJS。 JQ最好的开关forms,有很多模块,如路由内置。