2013-04-15 27 views
6

'a eşdeğer uygulanacak şekilde değiştirmeyi devre dışı bırakıyorum İşlendikten sonra bazı ortak eylemleri uygulamak için rota değişikliğini gözlemlemeye çalışıyorum. Buradaki fikir, onload'a benzer bir özelliğe sahip olmaktır, ancak tek sayfalık bir uygulama kullandığımızdan, bu her rota değişikliğinde tetiklenmelidir. o zaman rota değişiklikleri, ama yine de gidip erken tetiklenen alır, bu bazı durumlarda iyi çalışır ikenYük değişkeni

App.ApplicationController = Ember.Controller.extend({ 
    currentPathDidChange: function() { 
    prettyPrint() 
    }.observes('currentPath'); 
}); 

:

Ben currentPath değişiklikleri gözlemlemek için nasıl bulundu (yeni görünümüne kapsamlı olabilir) İçerik değişikliklerini içerik oluşturulmadan önce ekledikleri şekilde uygulayın.

Böyle bir amaca ulaşmak için en iyi uygulama hakkında bir fikrin var mı?

+2

Bir cevap bıraktım, ancak birçok durumda, DOM ile karıştırılmak üzere görünümleri beklemeniz gerekiyorsa aslında bir anti-desen olduğunu öneririm. Belki de, bazı görünümün 'didInsertElement' gibi, yaptığınız DOM manipülasyonunu koymak için daha iyi bir yer var mı? –

+0

Görünümleri uygularsanız, bunu ['didInsertElement'] içinde yapabilirsiniz (http://emberjs.com/api/classes/Ember.View.html#event_didInsertElement) – MilkyWayJoe

cevap

12

Kodu Ember.run.schedule ile ertelemeyi denediniz mi? Örneğin, yönlendirici içinde url bulma nedeniyle deprecation of Controllers in Ember 1.x için

App.ApplicationController = Ember.Controller.extend({ 
    currentPathDidChange: function() { 
    Ember.run.schedule('afterRender', this, function() { 
     prettyPrint(); 
    }); 
    }.observes('currentPath') 
}); 
+0

Teşekkürler! Bu benim için çalıştı. – John

0

gelecek kanıtı Uygulamalarınızı için iyi bir yol olurdu. Sen şöyle ember-cli yapabilirsiniz: Bu günlüğe kaydeder

// similar to onLoad event behavior 
export default Ember.Route.extend({ 
    afterModel: function (model){ 
    Ember.run.next(() => { 
     console.log(this.get('router.url')); 
    }); 
    } 
}); 

// hacky way to get current url on each transition 
export default Ember.Route.extend({ 
    actions: { 
    didTransition: function() { 
     Ember.run.next(() => { 
     console.log(this.get('router.url')); 
     }); 
    } 
    } 
}); 

: /posts ve /posts/3/comments vb.

+0

Kullanımdan kaldırılma sayfası, denetleyicilerin kullanımdan kaldırıldığını belirtmiyor. Sadece 'ArrayControllers' ve' ObjectControllers', ancak tüm kontrolörleri değil. – mikefrey

+0

Bu doğru, ama sonunda bu mantığın ya yönlendirilebilir bir bileşenle ya da bir rotayla sonuçlanması gerektiğini düşünüyorum. Şu anda (1,13.6) herhangi bir kullanım dışı bırakma uyarısı olmaksızın bir 'Denetleyici’i kullanabilirsiniz. Ancak bunun Ember 2’de (şu anda beta sürümünde) değişebileceğini düşünüyorum. –