senca touch 中的前后置过滤器

今天偶然看到老外提到senchatouch中的controller,并提到了

前后置过滤器,其实感觉是利用了ror中的BeforeFilters,或者

有点象JAVAAOP中的前后置过滤器了,例子如下:

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,这个是重点和亮点

相关推荐