2013-01-06 8 views
8

Używam Ember.js w mojej aplikacji, ale istnieje punkt, w którym aktualizuję właściwość kontekstu widoku (kontrolera), ale zaraz po aktualizacji jest parser (MathJax), który sprawdza dom dla zaktualizowanych pól przetworzyć go w matematyce. Jednak nawet jeśli aktualizacja ma miejsce, dzieje się tak, gdy mathjax szuka aktualizacji. To, co muszę zrobić, to zmusić embera do zaktualizowania widoku lub czekać na aktualizację embera, zanim powiem mathjaxowi, aby przeanalizował kod HTML. Czy istnieje sposób, aby to osiągnąć?Jak ręcznie zaktualizować widok w Ember.js?

Odpowiedz

17

Jest to dość powszechny przypadek użycia. Aby określić kod, który powinien zostać wykonany po zmianie właściwości, użyj obserwatora. Ember wyzwala obserwatorów po pomyślnym propagowaniu zmiany. Na przykład:

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') 
}); 

Zobacz Ember zarządzający-asynchrony przewodnikiem i Dokumentacja API dla Ember.run: http://emberjs.com/guides/understanding-ember/managing-asynchrony/ http://emberjs.com/api/classes/Ember.run.html#method_next

+0

Dziękuję, potrzebowałem Em.run.next (this, function() {... – Akash

+0

Widok już nie istnieje. Gdzie powinienem teraz sprawdzić zmianę właściwości? – Cameron