2013-04-18 13 views

cevap

5

Ben aynı sorunu ile mücadele ettik. Aşağıdaki hack'i başarıyla uyguladım.

window.App = Em.Application.extend 
    ready: -> 
    $(document).ajaxError((event, request, settings) => 
     if request.status == 401 && !["/profile", "https://stackoverflow.com/users/sign_in.json"].contains(settings.url) 
     controller = App.__container__.lookup('controller:application') 
     controller.transitionToRoute('sign_in') 
) 

Buradaki fikir, jQuery ajaxError olayını yakalamaktır. Bu durumda, hatayı (.e.g. Request.status == 401), hataya neden olan (ör. Settings.url) ve ne yapılacağına karar verebileceğiniz bu bilgilere dayanarak cadıyı kontrol edebilirsiniz. Bu sorun tek tek bütün yolları üzerinde yapılması gerekir olmasıdır

@store.get("user").then(=> 
    # Success stuff here 
).fail(=> 
    @transitionTo("login") # Do other fancy error stuff here too 
) 

:

Umut bu ben daha iyi bir yolu Sihirli Şehir vaat kullanmaktır düşünüyorum

+3

Bu şimdi yönlendirici tarafından ele alınmalıdır,: durum bir hata dizi içindeki bir hata nesnesi içinde bulunan bir dize, olacak http://stackoverflow.com/questions/17981563/ember -veri işleme-401S –

0

yardımcı olur. Belki de, sözlerin geri döndüğünü kontrol ederek, beforeTransition yöntemiyle bir şeyler yapabilirdiniz? Sadece düşünce için yiyecek.

8

ben aynı konuda araştırma ve bilgi burada biraz modası geçmiş gibi görünüyor. Ember 1.7.0'ı kullanarak, rotadaki hatayı çözmelisiniz. read here

Güncelleme: size bütün uygulaması için bu uygulamak isterseniz, dokümantasyon bunu açıklar gibi bu aynı şekilde yani

// app/routes/application.js 
import Ember from 'ember'; 

var ApplicationRoute = Ember.Route.extend({ 
    actions: { 
     error: function (error, transition) { 
      // Handle the error here 
      if (error && error.status === 401) { 
       return this.transitionTo('login'); 
      } 
     } 
    } 
}); 

export default ApplicationRoute; 

gibi, ApplicationRoute sınıfa eklemek gerekir Ember ve Ember Data'nın yeni sürümleri, hata nesnesi yapısı biraz farklı olacak. Buna benzer

actions: { 
    error: function(error, transition) { 
    if (error.errors[0].status === '401') { 
     this.transitionTo('sign-in'); 
    } 
    } 
} 
İlgili konular