Backbone.js不会路由到与当前URL相同的URL

时间:2012-02-29 16:52:19

标签: backbone.js routing backbone-routing

我遇到导航/路由网址的问题。比方说,我目前在#contact/new,我再次请求相同的网址,然后不调用相应的功能。我需要将网址更改为#contact/edit,然后点击#contact/new即可。从同一URL路由URL是一个问题吗?

4 个答案:

答案 0 :(得分:2)

我最后通过调用静态导航到root来解决这个问题:

var url = window.location.pathname.substr(Backbone.history.root.length);
this.navigate('/', { trigger: false });
this.navigate(url, { trigger: true });

请记住,这会创建一个额外的历史记录条目,但就我而言,这并不重要。

通过更改fragment对象的Backbone.history属性,你也可以在没有历史记录条目的情况下使用它,但是这个属性应该是私有的,所以在讨论之前我会三思而后行它:)

fragment属性用于将当前URL与传递给导航功能的URL进行匹配,因此如果路由不匹配,路由将会执行。

答案 1 :(得分:1)

我有同样的问题。 路由相同的url example.com/#/new(两次调用相同的url)将不会触发路由。 我通过在每次路由后更改URL来创建一个解决方法:

var url = window.location.href;
url = url.substring(0,url.indexOf('#')) + '#/';
window.location.replace(url);

或更容易:

window.location.hash = '#/';

但这个解决方案在我看来有点脏。

答案 2 :(得分:1)

我一直试图解决这个问题。我最近的尝试是添加一个函数,将一个时间戳字段附加到链接,然后调用导航功能:

var AppRouter = Backbone.Router.extend({...});

var app_router = new AppRouter;

function LoadLink(Link) {
  var Timestamp = new Date().getTime();
  app_router.navigate("#/" + Link + "/ts_" + Timestamp);
}

这种方法允许我有一个可以多次点击的链接,但是现在我必须在设置路线时考虑时间戳。它可能会在以后回来咬我。 :(

答案 3 :(得分:1)

我知道我迟到了,但我通过使用导航功能解决了类似的问题。

尝试类似:

this.navigate("#contact/edit", {trigger: false, replace: true});

将路由器认为的URL更改为#contact / edit而不实际调用该操作。