如何刷新骨干应用程序中的页面

Zhe*_*hen 29 javascript page-refresh backbone.js

我正在使用骨干来构建我的网络应用程序.

目前我正面临一个问题,即如果我在主页上,我再也无法点击"主页"按钮刷新同一页面.

我相信这是骨干提供的限制(如果调用相同的URL,则不会重新加载页面)

在此输入图像描述

有没有办法解决?因此,当我再次单击主页按钮时,我可以触发页面重新加载,即再次调用相同的URL?

ami*_*hle 38

你在找Backbone.history.loadUrl.来自注释来源:

尝试加载当前的URL片段.如果路线成功匹配,则返回true.如果没有定义的路由与片段匹配,则返回false.

因此,对于简单的刷新链接,您可以将以下事件添加到Backbone.View:

events: {
  'click a#refresh': function() {
    Backbone.history.loadUrl();
    return false;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个更好的答案:更短,更清洁,并且它不涉及与Backbone的"内部"(`Backbone.history.fragment`)混淆. (2认同)

Tha*_*yen 29

看看backbone.js源代码,默认情况下这似乎是不可能的,因为它只响应url更改.并且由于单击相同的链接,您不会触发更改事件.

Backbone.History中的代码:

$(window).bind('hashchange', this.checkUrl);
Run Code Online (Sandbox Code Playgroud)

您需要自己处理不变更.这是我做的:

$('.nav-links').click(function(e) {
    var newFragment = Backbone.history.getFragment($(this).attr('href'));
    if (Backbone.history.fragment == newFragment) {
        // need to null out Backbone.history.fragement because 
        // navigate method will ignore when it is the same as newFragment
        Backbone.history.fragment = null;
        Backbone.history.navigate(newFragment, true);
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 我不知道这个答案是否正确,但现在已经没有了.`Backbone.history.loadUrl`正是我需要的,看看我的回答. (4认同)

guy*_*uya 8

如果您想要使用所需视图重新加载整个页面.这可能会使主页按钮变为senes.它的优点是它会刷新内存.

转到任何路线而不加载它(没有'true')然后重新加载

Backbone.history.navigate('route/goes/here');
window.location.reload();
Run Code Online (Sandbox Code Playgroud)


Syn*_*ynn 6

backbone.history.loadUrl是解决方案.

主页按钮的单击处理功能(如果主页是WebApp的根目录)应该是:

myAppRouter.navigate('');
Backbone.history.loadUrl();
Run Code Online (Sandbox Code Playgroud)