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