在支持主干的应用程序中,我看到代码继续使用 <a href="#foo"></a>
,而 anchor 点击由 Backbone 事件处理程序处理。
或者,可以通过以下方式处理到 #foo 的导航:
Router.history.navigate("foo");
我相信后者是更好的方法,因为它允许轻松地迁移到 HTML5 的 PushState 功能或从 HTML5 的 PushState 功能迁移出来。如果我们确实使用pushState,对于不支持pushState的浏览器,Backbone将能够优雅地降级为#foo。
由于我对 Backbone 还很陌生,有经验丰富、知识渊博的人可以证实情况确实如此吗?
最佳答案
我个人已启用 pushState
并使用 Tim Branyen 的 Backbone 样板 adding a click handler 中采用的方法。将所有链接点击发送至navigate
,除非它们具有data-bypass
属性:
$(document).on("click", "a:not([data-bypass])", function(evt) {
var href = { prop: $(this).prop("href"), attr: $(this).attr("href") };
var root = location.protocol + "//" + location.host + Backbone.history.options.root;
if (href.prop && href.prop.slice(0, root.length) === root) {
evt.preventDefault();
Backbone.history.navigate(href.attr, true);
}
});
这工作得很好,正如 @nickf 提到的,它的优点是你不必使用 hash/hashbang hack,即使对于不支持 pushState 的浏览器也是如此。
关于javascript - Backbone 路由器导航和 anchor href,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12081894/