Backbone.js 如何在主干路由器中使用标准URL?

Backbone.js 如何在主干路由器中使用标准URL?,backbone.js,Backbone.js,根据该页面: 直到最近,散列片段(#page)才被用来提供这些信息 permalinks,但随着历史API的到来,现在 可以使用标准URL(/page) 我尝试添加此路由器规则: routes: { 'test': function() { alert('ok'); } } 并调用Backbone.history.start({pushState:true,root:'/myroot/'})。我的页面中有一个链接: <a href="test">test me<

根据该页面:

直到最近,散列片段(#page)才被用来提供这些信息 permalinks,但随着历史API的到来,现在 可以使用标准URL(/page)

我尝试添加此路由器规则:

routes: {
  'test': function() {
     alert('ok'); }
}
并调用
Backbone.history.start({pushState:true,root:'/myroot/'})
。我的页面中有一个链接:

<a href="test">test me</a>
当我点击链接时,没有发出请求,我相信拦截成功了但该事件不会被触发。


所以,请帮助我理解这个
历史API
是如何工作的。或者指出我哪里做错了。

您需要打开pushState:

Backbone.history.start({pushState:true})

您的链接将强制您的服务器进行完全刷新,您的服务器必须使用该url的内容进行响应

您需要拦截该链接的点击并告诉路由器导航到“测试”路由:

myRouter.navigate(“测试”)

有关HTML5历史api的更多信息:

有关将pushState与主干一起使用的一些介绍级信息:

还有我做的一个视频,涵盖了所有这些:


希望能有所帮助。

您需要在导航调用中添加{trigger:true}以实际触发路由事件。

要表示您希望在应用程序中使用HTML5pushState支持,请使用
主干.history.start({pushState:true})
。如果您想使用pushState,但浏览器本身不支持它,则可以使用全页刷新,您可以将
{hashChange:false}
添加到选项中

PS如果您的应用程序不是从您域的根url
/
提供的,请务必告知历史记录根的实际位置,作为一个选项(否则导航将无法工作!):


谢谢你,德里克。正如你指出的,我更新了我的代码。但它仍然无法工作。请查看更新的问题。问题已解决。我应该使用
router.navigate('test',{trigger:true})
$('a[href=test]').click(function(e) {
  router.navigate('test');
  e.preventDefault(); });
Backbone.history.start({pushState: true, root: "/public/search/"})