Monthly Archives: November 2015

Javascript检测用户按F5或者点刷新按钮刷新

对于SPA应用,检测用户是否按F5或者点击浏览器刷新按钮,因为一些重绘整体layout的逻辑需要在这地方完成,最近在项目中用下面的方法完成了这件事

window.onbeforeunload = function () {
    sessionStorage.setItem('refresh', true);
};

var isRefreshingPage = function () {
    var oldState = sessionStorage.getItem('refresh');
    sessionStorage.setItem('refresh', false);
    return oldState == 'true';
};

Marionette.AppRouter如何和backbone.routefilter一起工作

首先Marionette的AppAouter的hook留的太少,只有一个onRoute方法可以用,而且这个方法是发生在route之后,对于单页面程序来说,有一些动作比如当用户手动refresh页面那么reset layout还是希望在route之前来做,因为绝大多数的开发人员只用调用mainRegion.show(view),而mainRegion只是layout的一个区域。
backbone.routefilter提供了before,after等丰富的hook点,但是因为Marionetter提倡要小的controller,导致每个模块都是以下类代码,

var xxController = Marionette.Controller.extend({...});
app.addInitializer(function () {
new Marionette.AppRouter({
appRoutes: {
'a(/)': 'process_A',
'b(/)': 'process_B'
},
controller: new xxController()
});
});

这样的代码是没办法跟backbone.routefilter一起工作,因为AppRouter是继承自Backbone的Router的,所以解决的方法就是给AppRouter.prototype加上hook点,这样backbone.routefilter就能工作了。

_.extend(Marionette.AppRouter.prototype,{before:function(route,args){
...
},
after:function(route,args){
...
}
});