刷新具有相同URL哈希的BackboneJS?

9

我的当前backbone应用程序有一个url:

localhost/#users

有没有一种方法可以在URL为localhost/#users时访问localhost/#users并刷新页面?
当前,当我在localhost/#users时,尝试使用以下代码: window.location.hash = #usersmyBackboneRouter.navigate("users") 但它不会触发页面刷新。

1
为什么要重新加载用户已经访问的页面? - Edward M Smith
1
我有一些ajax绑定,我想在同一页上再次运行它们。 - kidcapital
我不确定你所说的“ajax绑定”是什么意思,但你能否只是创建一个函数来再次调用它们,然后调用该函数而不是路由?重新渲染整个页面以刷新其中的一小部分似乎有些笨重。 - Edward M Smith
4个回答

35

在backbone中刷新同一页面,您需要使用

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

1
在哪个部分需要放置这段代码? - boycod3
这个不错!它可以进行软重载,而无需像window.location.reload()那样进行完整页面重载。 - Kafoso

6
我认为myBackboneRouter.navigate("users", {trigger: true})会实现你想要的功能。

我尝试了这个,但它仍然无法触发 :( - kidcapital
8
好的,我看到 navigate 函数中有 if (this.fragment == frag) return; 这一行代码,这会在触发器强制调用路由之前将该过程短路。如果您只想运行着陆在该路由上时运行的代码,可以手动调用路由将哈希值映射到的函数。例如,如果你的路由器有 routes: {'users': 'users'} ,那么你只需调用 myBackboneRouter.users(); 即可,而不必调用 navigate。 - heavi5ide
2
我点赞了这个答案,但是heavi5ide的评论才是真正解决我的问题的方法。 - jason.zissman
在Backbone 1.0中,它读取this.fragment === frag。可以将传递的frag转换为唯一的String对象,并强制使此比较为false。 - Elf Sternberg

2

我使用以下三行代码重新加载我的backbone页面:

router.navigate(Backbone.history.fragment, true);
Backbone.history.loadUrl( Backbone.history.fragment );
router.refresh(true);

或者简单地说
Backbone.history.loadUrl(Backbone.history.fragment);

我需要把这个放在路由器的哪里?每个路由/当路由被实例化/其他地方? - Anna

-1

为什么不使用呢?

window.location.reload();

要么这样,要么调用你的视图渲染()函数。

1
window.location.reload() 的问题在于它重新加载整个页面。如果您希望您的 Backbone 路由器控制重新渲染的内容而无需重新加载整个页面,则这是不可取的。 - NoBrainer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接