2012-03-13 28 views
5

Necesito anular Ext.data.Connection para mostrar un Formulario de inicio de sesión. Lo hago por el momento en Ext.application.launch que funciona como se esperaba.Anular Ext.data.Connection - Best Practice

¿Es posible intercambiar este fragmento de código en algún lugar diferente, como en un archivo adicional?

+0

¿Por qué desea anular Connection para mostrar el formulario de inicio de sesión exactamente? para presentar al usuario el formulario de inicio de sesión si no está autenticado? – sha

+0

Exactamente. Y también si la sesión expira. –

+0

Agregué el controlador global para los errores de Ajax y analicé allí los errores no autenticados. Tal vez sea algo que te convenga también. – sha

Respuesta

6

Si necesita esto solo para reconocer cuando el usuario no está autenticado, es posible que desee considerar hacer otra cosa. Como la adición de un controlador a Ajax Singleton:

function addAjaxErrorHandler(object) { 

    Ext.Ajax.on('requestexception', function(conn, response, options, e) { 

     var statusCode = response.status, 
     errorText = null, 
     captionText = response.statusText; 

     // 404 - file or method not found - special case 
     if (statusCode == 404) { 
      Ext.MessageBox.alert('Error 404', 'URL ' + response.request.options.url + ' not found'); 
      return; 
     } 

     if (response.responseText != undefined) { 
      var r = Ext.decode(response.responseText, true); 

      if (r != null) { 

       // 401 - not authenticated. For some reason we don't have authentication cookie anymore 
       if (r.ErrorCode == 401) { 
        Ext.MessageBox.alert('Error', 'You must log in to use application', 
         function() { 
// do something when user is not authenticated 
         object); 
        return; 
       } 

       errorText = r.ErrorMessage; 
      } 

      if (errorText == null) 
       errorText = response.responseText; 
     } 

     if (!captionText) 
      captionText = 'Error ' + statusCode; 

     Ext.MessageBox.alert(captionText, errorText); 
    }, 
    object);   
} 

A continuación, sólo llamar a esta función de su función() application.launch y pasan objeto de aplicación por lo que el alcance si se ha definido.

+0

Muchas gracias, esto no es exactamente lo que necesitaba, pero me dirigió en la dirección correcta. :) –

+0

Me alegra ayudar :) – sha

+0

Parece que esto no se ejecutará si tienes un controlador de fallas en otros ajax solicita llamadas. – jujule