2

我正在使用骨干路由器来处理客户端单击单个页面上的各种选项。除其他外,此路由器的行为也类似于简单的同页锚标记链接。

我遇到的问题是,如果用户单击其中一个选项(例如“详细信息”)然后滚动离开,他们可能想再次单击“详细信息”。如果他们这样做,则不会发生任何事情 - 应用程序已经路由到详细信息并且不会重新路由。我只会使用简单的链接,例如<a href="#details">Details</a>,但不仅仅是在页面上跳转。有没有办法强制重新路由发生?

4

3 回答 3

4

根据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);
}
于 2014-09-11T01:05:16.833 回答
2

总是会返回,没有参数可以强制它。我现在正在寻找解决方案,我看到的一个解决方案是用新的默默替换当前路线,然后尝试导航到旧路线。

UPD:实际上,您可以使用Backbone.history.loadUrl

于 2014-04-08T14:47:22.950 回答
-1

如果在视图中绑定点击事件,则可以手动触发路由。

查看.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);
  }
});
于 2012-07-13T18:01:51.577 回答