backbone.js 触发同位置进路

i86rm4rw  于 2022-11-10  发布在  其他
关注(0)|答案(8)|浏览(115)

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

qhhrdooz

qhhrdooz1#

Backbone.history.loadUrl(Backbone.history.fragment);

针对您的特定问题的解决方案并没有真正记录下来,建议的最佳实践似乎是只调用在您要触发的路由中声明的函数:/
参考编号:https://github.com/documentcloud/backbone/issues/1214
到目前为止,其他答案都是正确的,但他们忘记提到,如果导航到的哈希与当前哈希相同,则不会触发任何东西。

rpppsulh

rpppsulh2#

Router.navigate('about', true);

这样,您就可以手动触发路由。

mxg2im7a

mxg2im7a3#

假设您要对不止是“关于”页执行此操作,请用途:

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

46scxncf4#

因为 Backbone 路由器会在你想要加载的URL片段中寻找变化,所以我的做法是先导航到'/'而不使用触发器,然后再导航到你想要用触发器命中的URL(片段)。如果你愿意的话,你可以很容易地将此构建到默认的路由器行为中。
例如:

App.Routers.appRouter.navigate '/', {trigger: false}
App.Routers.appRouter.navigate myPath, {trigger: true}
n53p2ov0

n53p2ov05#

使用Backbone 0.9.2,您可以传入一个选项对象,并将“trigger”设置为“true”。

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

参考:http://documentcloud.github.com/backbone/#Router-navigate

cwtwac6a

cwtwac6a6#

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

vsnjm48y

vsnjm48y7#

谢谢你的建议@eddywashere,真的很棒。我在我的网站上添加了一个小编辑,检查你是否在最后一个(最新的)网址上,如果是,加载历史记录。非常简单,我想它可能会帮助一些有同样问题的人。

$("[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);
  }
});
4dc9hkyq

4dc9hkyq8#

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.

相关问题