2012-07-31 19 views
20

Yeni Ember.js yönlendirici ve çıkışlarını kullanan eyaletler arasında geçişi canlandırmak istiyorsanız, bir çıkışın önceki içeriği yok edileceği için şansınız kalmadı Onu canlandırma şansın olmadan önce. Yeni duruma geçmeden önce bir görünümü tamamen canlandırabileceğiniz durumlarda sorun olmaz. Sadece eski ve yeni görünümlerin sorunlu olduğu görünmesi gereken durumdur.Ember.js yönlendirme, çıkışlar ve animasyon

Hem önceki çıkış içeriğini hem de yeni olanı this commit'da eklemeye yarayan bazı işlevler gibi görünüyor, ancak nasıl kullanacağımı anlayamadığımdan emin değilim.

de açıkça "arada" animasyonlar (here ve here) temsil edebilir belirtmektedir modellemek için ekstra geçiş yolları/durumları kullanmayla ilgili bazı tartışmalar olmuş, ancak bu yaklaşımı maç için şu anda mümkün olup olmadığından emin değilim çıkışlı denetleyicileri ve görünümleri ile.

Bu, How *not* to destroy View when exiting a route in Ember.js'a benzer, ancak outlet yardımcı programını geçersiz kılmanın iyi bir çözüm olduğundan emin değilim.

Herhangi bir fikrin var mı?

+0

İlgili [ember.js Yönlendirici: durum geçişlerini animasyon yöntemi] (Böyle bir rota içinden

{{animatedOutlet name="main"}} 

Ve geçişi http://stackoverflow.com/questions/14521847/ember-js-router-how-to-animate-state-transitions/) –

cevap

7

Şunlara dikkat etmelisiniz: https://github.com/billysbilling/ember-animated-outlet.

Sonra Gidon şablonları yapabilirsiniz:

App.ApplicationRoute = Ember.Route.extend({ 
    showInvoice: function(invoice) { 
     this.transitionToAnimated('invoices.show', {main: 'slideLeft'}, invoice); 
    } 
}); 
+1

http://emberjs.com/blog/2013/08/31/ember-1-0-released.html adresinden dayanarak, şu anda bunun doğru cevap olduğunu söyleyerek rahat hissediyorum; ember-animated-outlet "Ember'in gelecekteki bir versiyonuna girecek". – adamesque

25

Şu anda animasyonları desteklemek için bazı görünümlerimdeki didInsertElement ve willDestroyElement geçersiz kıldım. didInsertElement hemen öğeyi gizler ve ardından görüntüyü canlandırır. willDestroyElement öğeyi klonlar ve görüntüyü dışarıdan canlandırır.

didInsertElement: function() 
{ 
    this.$().slideUp(0); 
    this.$().slideDown(250, "easeInOutQuad"); 
}, 

willDestroyElement: function() 
{ 
    var clone = this.$().clone(); 
    this.$().replaceWith(clone); 
    clone.slideUp(250, "easeInOutQuad"); 
} 

Şahsen ben sadece animasyonlar desteklemek için gereksiz ContainerViews benim çıkışları sarma başlamak istemiyoruz.

+2

Bu iyi bir cevap, fakat [oku] 'yı okuduktan sonra (https://github.com /emberjs/ember.js/issues/1017) İstediğim şey için yerleşik destek v1.1'e varamayacağım. – adamesque

+0

didInsertElement: function() { this. $ ('# Top_items'). FadeOut (0); bu. $ ('# Top_items'). FadeIn (1500); }, – lesyk

+1

Ember 1.0'da artık çalışmıyor. ReplaceWith() işlevini kullanmadan önce görünüm yok edilir. Bunun yerine görünümün ana kapsayıcısına ekleyin. this. $(). Parent(). Hazırla (klonla); – narkeeso