我正在使用骨干路由器来处理客户端单击单个页面上的各种选项。除其他外,此路由器的行为也类似于简单的同页锚标记链接。
我遇到的问题是,如果用户单击其中一个选项(例如“详细信息”)然后滚动离开,他们可能想再次单击“详细信息”。如果他们这样做,则不会发生任何事情 - 应用程序已经路由到详细信息并且不会重新路由。我只会使用简单的链接,例如<a href="#details">Details</a>
,但不仅仅是在页面上跳转。有没有办法强制重新路由发生?
我正在使用骨干路由器来处理客户端单击单个页面上的各种选项。除其他外,此路由器的行为也类似于简单的同页锚标记链接。
我遇到的问题是,如果用户单击其中一个选项(例如“详细信息”)然后滚动离开,他们可能想再次单击“详细信息”。如果他们这样做,则不会发生任何事情 - 应用程序已经路由到详细信息并且不会重新路由。我只会使用简单的链接,例如<a href="#details">Details</a>
,但不仅仅是在页面上跳转。有没有办法强制重新路由发生?
根据Alexey的回答,可以强制 Backbone 的历史/路由器“重新路由”当前 URL,就好像它触发了重新加载一样。
您实际上可以检测到典型的调用是否navigate
由于已经在同一个 url 上而失败/不返回任何内容,并loadUrl
在这些情况下调用强制它。
例如,我的站点范围的内部链接处理程序如下所示:
// `Backbone.history.navigate` is sufficient for all Routers and will
// trigger the correct events. The Router's internal `navigate` method
// calls this anyways.
var ret = Backbone.history.navigate(href, true);
// Typically Backbone's history/router will do nothing when trying to load the same URL.
// In some cases (links with .allow-reload), we want it to re-fire the same route.
// We can detect when Backbone.history.navigate did nothing, and force the route.
if (ret === undefined && $link.hasClass('allow-reload')) {
Backbone.history.loadUrl(href);
}
如果在视图中绑定点击事件,则可以手动触发路由。
查看.js
SearchView = Backbone.View.extend({
initialize: function(options){
alert("Alerts suck.");
this.router = options.router;
},
events : {
"click a.detail_link" : "showDetails"
},
showDetails : function(){
this.router.navigate("/#details", true);
}
});