答案 0 :(得分:34)
经过一番探索后,我找到了解决方案。 @Eisenhauer Backbone的路由设施很棒,但如果我不使用Backbone会怎样。 正如我在我的问题中所概述的那样,我已经在使用KnockoutJS,它为我提供了客户端MVVM模型,因此在同一页面中添加额外的MVC实现并不是一个好主意。
对于寻找独立路由解决方案的人来说,pathjs是一个简单而优雅的解决方案。
更灵活,功能强大且独立的路由解决方案是http://millermedeiros.github.com/crossroads.js/提供的Crossroads.js。 它的文档非常精确,功能非常强大,因此可以适应任何要求。
答案 1 :(得分:14)
你可以使用History API而不是hashbang方法吗?
缺点是旧浏览器不支持它。你可以依靠hashbang方法(如果你真的需要)。我不知道有任何现有的框架可以做到这一点。我宁愿依靠不动态加载内容(即用户点击链接时的整页重新加载)。历史API将得到越来越广泛的支持,因此这个“问题”将随着时间的推移而减少。
这是一个带有一些文档的working example。在地址栏中,看起来页面正在加载“旧学校”(整页刷新),但如果您查看控制台(Firebug,Chrome开发工具),您可以看到通过AJAX请求获取内容
Mozilla对此有一些docs。
答案 2 :(得分:12)
还有优秀的Director
答案 3 :(得分:4)
Crossroads.js似乎是最好的之一。它的一个主要优点是,它不依赖于window.location进行路由。它很轻巧,因为它坚持只做路由和路由。
您可能想尝试的其他人:finch.js, davisjs(基于pushState,以便在JS失败时可以使用现有链接作为后备)
追加更新: 2015年3月30日 - 我去年年底搬到了AngularJS。提供最好的JQ交换机,有很多模块,比如内置路由。