4

我在导航/路由 URL 时遇到问题。举例来说,我目前#contact/new正在请求相同的 url,然后它没有调用相应的函数。我需要将 URL 更改为例如#contact/edit,然后单击#contact/new工作。从同一个 URL 路由 URL 现在是个问题吗?

4

4 回答 4

2

我最终通过提前调用无提示导航到根解决了这个问题:

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

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

您也可以通过更改对象的fragment属性来使其在没有历史记录条目的情况下工作Backbone.history,但是该属性应该是私有的,所以我会三思而后行,然后再玩弄它:)

片段属性用于将当前 URL 与传递给导航函数的 URL 进行匹配,因此如果它们不匹配,路由将执行。

于 2013-12-16T09:06:34.770 回答
1

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

尝试类似:

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

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

于 2012-10-16T19:36:49.347 回答
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 = '#/';

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

于 2012-04-12T15:07:13.697 回答
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);
}

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

于 2012-08-30T18:06:58.993 回答