我遇到导航/路由网址的问题。比方说,我目前在#contact/new
,我再次请求相同的网址,然后不调用相应的功能。我需要将网址更改为#contact/edit
,然后点击#contact/new
即可。从同一URL路由URL是一个问题吗?
答案 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而不实际调用该操作。