我正在使用backbone构建我的网页应用。
目前我面临的问题是,如果我在主页上,我无法通过再次点击“主页”按钮来刷新同一页面。
我相信这是backbone提供的限制(如果调用相同的URL,则不重新加载页面)
有没有什么方法可以解决这个问题?也就是说,当我再次点击主页按钮时,可以触发页面重新加载,即再次调用相同的URL?
我正在使用backbone构建我的网页应用。
目前我面临的问题是,如果我在主页上,我无法通过再次点击“主页”按钮来刷新同一页面。
我相信这是backbone提供的限制(如果调用相同的URL,则不重新加载页面)
有没有什么方法可以解决这个问题?也就是说,当我再次点击主页按钮时,可以触发页面重新加载,即再次调用相同的URL?
Backbone.history.loadUrl
。
来自注释源码:
因此,对于一个简单的刷新链接,你可以将以下事件添加到你的尝试加载当前的URL片段。如果路由成功匹配,则返回
true
。如果没有定义的路由与片段匹配,则返回false
。
Backbone.View
:events: {
'click a#refresh': function() {
Backbone.history.loadUrl();
return false;
}
}
从backbone.js的源代码来看,默认情况下似乎不可能实现这一点,因为它只响应URL的更改。而且,由于点击相同的链接,您不会触发change事件。
Backbone.History中的代码:
$(window).bind('hashchange', this.checkUrl);
你需要自己处理不变的情况。这是我所做的:
$('.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);
}
});
Backbone.history.loadUrl
正好符合要求,请看我的回答。 - amiuhle如果您想以所需的视图重新加载整个页面。这对于主页按钮可能有意义。优点是它将刷新内存。
在不加载任何路由(不使用“true”)的情况下前往任何路由,然后重新加载。
Backbone.history.navigate('route/goes/here');
window.location.reload();
解决方案是使用backbone.history.loadUrl。
如果主页是你的WebApp的根目录 /,则 Home 按钮的点击处理函数应为:
myAppRouter.navigate('');
Backbone.history.loadUrl();
当屏幕方向发生变化时,我需要“刷新”我的页面,因为默认情况下并不会正确执行所有针对纵向模式的CSS媒体查询。这是我最终采取的方法:
Backbone.history.fragment = null;
Backbone.history.navigate(document.location.hash, true);
window.addEventListener('orientationchange', function () {
Backbone.history.fragment = null;
Backbone.history.navigate(document.location.hash, true);
}, false);
var url = $(this).attr('href') + '?rand=' + Math.floor(Math.random() * 1000);
Backbone.history.navigate(url, true);
这对IE尤其有用,因为如果URL没有更改,它不会通过AJAX调用请求新数据。
@win_loc = window.location.toString().replace("#","")
Backbone.history.redirectTo(@win_loc)
这是目前我最喜欢的方法:
if (!Backbone.history.navigate(urlPath, true)) {
Backbone.history.loadUrl();
}
这不是backbone的问题。在Chrome(webkit浏览器)中可以正常工作,但在Firefox中无法正常工作。这是浏览器行为
http://localhost.com/和http://localhost.com/#!/之间的区别在于,第二个是指向锚点的链接,它不会加载页面,只会在当前页面中查找锚点,并在找到后滚动到该位置。您需要让您的链接看起来像第一个,末尾不要有"#"。
Backbone.history.fragment
)交互。 - machineghost