今天偶然看到老外提到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, 这个是重点和亮点