2012-07-23 18 views
12

Bir rota değişikliğinin nasıl önleneceğini veya duraklatılacağını anlamaya çalışıyorum. Düzenleme ekranlarımda, kullanıcı kaydedilmemiş değişikliklere sahip olduklarında uzaktaysa (geri düğmesi veya başka bir mekanizma), sayfayı terk etmek istediğinden emin olmalarını isterim. window.onbeforeunload'a çok benzer, ancak yönlendirici üzerinden.Ember.js yönlendirmesi - koşullu olarak rota/durum değişikliğini önleme

Ember'in önceki sürümlerindeki durum çizelgesi size kullanabileceğiniz bir geçiş nesnesi verdi. Görünüşe bakılırsa, en yeni durumda, artık böyle değil. Peki bunun için en iyi yolu nedir?


DÜZENLEME:

yukarıdaki soru eskidir ve listelenen cevaplar tarihli. Ember şimdi bunun için yerel bir yolu var. Bkz: Belgeler: http://emberjs.com/guides/routing/preventing-and-retrying-transitions/

cevap

2

Bir eyaletten çıkmadan önce herhangi bir işleyici mevcut olmadığından (belki bir şeyi özledim) mümkün olduğundan emin değilim. triggering enter state ve enterState() code adreslerine bakıldığında, iki durum arasındaki geçişi kesemeyeceğiniz veya iptal edemediğiniz anlaşılıyor.

Bu, Tom Dale tarafından Allow canceling state transitions'da açıklanmıştır. Durumunuzda, kullanıcı iptal ederse önceki durumu yeniden yönlendirmekle sorumlu bir ara devlet ilan edebilir veya kullanıcı kabul ederse yeni duruma geçebilirsiniz. Ben uygulamak için daha :(

+0

Bu kabul edilen yanıt olarak işaretlenmesi gereken – dmzza

8

Eğer geçişleri koşullu hale yapmak istediğim ne yazmak daha kolay demek zorunda yerine doğrudan Ember.Route.transitionTo kullanmak yerine, böyle bir şey istiyorum:.

var transitionAfterConfirmation = function(target){ 
    var defaultEvent = Ember.Route.transitionTo(target), 
     event = function(stateManager, context){ 
      if(confirm("Really go?")){ 
       defaultEvent(stateManager,context); 
      } 
     }; 

    event.transitionTarget = target; 

    return event; 
}; 

bir için http://jsfiddle.net/hjdivad/KsHCN/ bakınız . örnek

+0

Gerçekten güzel! Bağlantıyı kemanına saklıyorum ... :-) –