Javascript 触发同一位置路由

Javascript 触发同一位置路由,javascript,routes,backbone.js,Javascript,Routes,Backbone.js,是否有方法在backbone.js中触发相同的位置路由,例如,当位置为/My/App/#/About时,用户再次单击具有相同路由的锚点以刷新页面内容 Router.navigate('about', true); 通过这种方式,您可以手动触发路由。如果您不只是想在“关于”页面上执行此操作,请使用: route = Backbone.history.fragment; yourRouter.navigate(route, true); 使用主干0.9.2传入一个选项对象,并将“触发器”设置为“

是否有方法在backbone.js中触发相同的位置路由,例如,当位置为
/My/App/#/About
时,用户再次单击具有相同路由的锚点以刷新页面内容

Router.navigate('about', true);

通过这种方式,您可以手动触发路由。

如果您不只是想在“关于”页面上执行此操作,请使用:

route = Backbone.history.fragment;
yourRouter.navigate(route, true);

使用主干0.9.2传入一个选项对象,并将“触发器”设置为“真”

router.navigate('some/route', { trigger : true });
参考:

您的特定问题的解决方案并没有真正的文档化,建议的最佳做法似乎是只调用在您要触发的路由中声明的函数:/

参考:


到目前为止,其他答案都是正确的,但他们忘了提到,如果导航到的哈希与当前哈希相同,则不会触发任何内容

由于主干路由器会查找您要加载的URL片段中的更改,因此对我来说最有效的方法是先导航到“/”而不使用触发器,然后再导航到您要使用触发器命中的URL(片段)。如果需要,您可以很容易地将其构建到默认路由器行为中

e、 g


谢谢你的建议@eddywashere,真是太棒了。我在我的url中添加了一个小编辑,检查您是否在最后一个(最新的)url上,如果是,则加载该历史记录。很简单,我想这可能会对有同样问题的人有所帮助

$("[data-href]").on("click", function(e) {
  var href;
  e.preventDefault();
  href = $(e.currentTarget).data("href");
  if ((_.last(this.history)) === href) {
    return Backbone.history.loadUrl(_.last(this.history));
  } else {
    return this.router.navigate(href, true);
  }
});

另一个选项:您可以添加一个带有随机值的参数,因此每次调用的哈希值都会不同,即使您调用同一页。

似乎这是唯一一个真正允许刷新同一页的答案,谢谢!难道我们不应该使用Backbone.history.getFragment()来避免触及历史的属性吗?在我看来似乎更干净。
getFragment()
无疑是一种更合适的方法,具有更现代的主干。但是,我会+1关于运行声明函数的注释,而不是试图欺骗路由器进行更新。或者,最近的
Backbone.router
类可以接受比true/false更多的对象,
router.navigate(Backbone.history.getFragment(),{trigger:true,replace:true})这将替换现有导航(技术上已经这样做了,因为目标哈希与当前哈希相同),但这不适用于重新加载当前路由。导航返回目标片段是否与当前片段匹配。是否在常规javascript而不是coffeescript中共享此内容?
router.navigate(route, {trigger: false}); // Changes URL but it will not trigger...Ex: In place of route -- 'about/1' or 'about' etc

Backbone.history.loadUrl(Backbone.history.fragment); // Changed route will be triggered here.
$("[data-href]").on("click", function(e) {
  var href;
  e.preventDefault();
  href = $(e.currentTarget).data("href");
  if ((_.last(this.history)) === href) {
    return Backbone.history.loadUrl(_.last(this.history));
  } else {
    return this.router.navigate(href, true);
  }
});
router.navigate(route, {trigger: false}); // Changes URL but it will not trigger...Ex: In place of route -- 'about/1' or 'about' etc

Backbone.history.loadUrl(Backbone.history.fragment); // Changed route will be triggered here.