今天偶然看到老外提到sencha touch 中的controller,并提到了
前后置过滤器,其实感觉是利用了ror中的BeforeFilters,或者
有点象JAVA AOP中的前后置过滤器了,例子如下:
Ext.Dispatcher.on('before-dispatch', function(interaction) { if(Ext.isFunction(interaction.controller.beforeFilter)) { return interaction.controller.beforeFilter.call(); }; return true; });
Ext.Dispatcher.on('dispatch', function(interaction) { if(Ext.isFunction(interaction.controller.afterFilter)) { return interaction.controller.afterFilter.call(); }; return true; });
以上是注册。
比如一个校验用户是否登录的controller中:
Ext.regApplication({ // code, code, code... loggedIn: readCookie('user_credentials') || false, requireUser: function() { if(app.loggedIn) return true; app.flash.warning = 'Please login to continue.'; Ext.redirect('login'); return false; }, flash: { notice: '', warning: '' } });
假设在每个页中都要校验,所以在控制器前先执行 app.requireUser,
如下:
Ext.regController('accounts', { beforeFilter: app.requireUser, model: 'Account', index: function(options) { app.views.viewport.setActiveItem( app.views.accountsList, options.animation ); }, // other actions here... });
看到不? beforeFilter: app.requireUser, 这个是重点和亮点