2012-03-13 6 views
5

Muszę przesłonić Ext.data.Connection, aby pokazać formularz logowania. Robię to w tej chwili w Ext.application.launch, który działa zgodnie z oczekiwaniami.Zastąpić Ext.data.Connection - najlepsza praktyka

Czy można zamienić ten fragment kodu w inny sposób niż w dodatkowym pliku?

+0

Dlaczego chcesz zastąpić połączenie, aby wyświetlić dokładnie formularz logowania? przedstawić użytkownikowi formularz logowania, jeśli nie jest on uwierzytelniony? – sha

+0

Dokładnie. A także jeśli limit czasu sesji. –

+0

Dodałem obsługę globalną błędów Ajax i przeanalizowałem tam nieuwierzytelnione błędy. Może to coś, co będzie ci odpowiadać. – sha

Odpowiedz

6

Jeśli potrzebujesz tego tylko do rozpoznania, kiedy użytkownik nie jest uwierzytelniony, możesz rozważyć zrobienie czegoś innego. Jak dodanie obsługi Ajax pojedyncza:

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);   
} 

Następnie wystarczy wywołać tę funkcję z application.launch function() i przekazać obiekt aplikacji tak zakresem jeśli zdefiniowane.

+0

Dziękuję bardzo, nie jest to dokładnie to, czego potrzebowałem, ale wskazało mi to we właściwym kierunku. :) –

+0

Cieszę się, że pomogę :) – sha

+0

Wygląda na to, że to nie będzie wykonane, jeśli masz obsługę niepowodzeń w innych wywołaniach zapytań ajax. – jujule