2013-01-06 44 views
8

Uygulamamda Ember.js kullanıyorum, ancak görünümün bağlamının (denetleyici) bir özelliğini güncelleştirdiğim ancak güncelleştirmenin hemen ardından güncellenmiş alanlar için dom'a bakan bir ayrıştırıcı (MathJax) bulunduğum bir nokta var. onu matematiğe ayırmak. Ancak güncelleme gerçekleşiyor olsa da, mathjax güncellemeyi aradıktan sonra gerçekleşir. Yapmam gereken şey, görünümü güncellemek için kepçeyi zorlamak ya da html'yi ayrıştırmak için mathjax'ı anlatmadan önce güncellemeyi beklemek. bunu arşivlemenin bir yolu var mı?Ember.js'de görünümü manuel olarak güncelleme nasıl yapılır?

cevap

17

Bu oldukça yaygın bir kullanım vakasıdır. Bir mülkün değiştikten sonra yürütülmesi gereken kodu belirtmek için bir gözlemci kullanın. Ember, değişimi başarılı bir şekilde yaydıktan sonra gözlemcileri tetikler. Örneğin:

App.MathView = Ember.View.extend({ 
    controller: null, 
    template: Ember.Handlebars.compile("<div>{{myProperty}}</div>"), 

    myPropertyDidChange: function() { 
    // From here the controller value is changed but DOM has not been updated 
    Ember.run.next(this, function() { 
     // This code will run when after changes have propagated to the DOM 
     // Call MathJax parser here 
     // If needed you can access the view's DOM element via this.$() 
     alert("New property value is in dom: "+ this.$().text()); 
    }); 
    }.observes('controller.myProperty') 
}); 

Ember.run için Kor Yönetme-Asenkron Kılavuzu ve API docs bakınız: http://emberjs.com/guides/understanding-ember/managing-asynchrony/ http://emberjs.com/api/classes/Ember.run.html#method_next

+0

Teşekkürler, ihtiyaç duyduğum şey Em.run.next idi (this, function() {... – Akash

+0

Görünüm artık yok. Şimdi bir mülk değişimini nerede kontrol etmeliyim? – Cameron

İlgili konular