2013-01-06 18 views
8

Sto usando Ember.js nella mia applicazione, ma c'è un punto in cui aggiorno una proprietà del contesto della vista (controller) ma subito dopo l'aggiornamento c'è un parser (MathJax) che guarda la dom per i campi aggiornati per analizzarlo in matematica. Tuttavia, anche se l'aggiornamento è in corso, succede dopo che mathjax cerca l'aggiornamento. Quello che devo fare è forzare ember ad aggiornare la vista o aspettare che ember si aggiorni prima di dire a mathjax di analizzare l'html. C'è un modo per ottenere questo?Come aggiornare la visualizzazione manualmente in Ember.js?

risposta

17

Questo è un caso d'uso abbastanza comune. Per specificare il codice che deve essere eseguito dopo la propagazione delle modifiche di una proprietà, utilizzare un osservatore. Ember innesca gli osservatori dopo aver propagato con successo la modifica. Per esempio:

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

Vedi le docs Ember Managing-Asynchrony Guida e API per Ember.run: http://emberjs.com/guides/understanding-ember/managing-asynchrony/ http://emberjs.com/api/classes/Ember.run.html#method_next

+0

Grazie, quello di cui avevo bisogno era Em.run.next (this, function() {... – Akash

+0

Ora la vista è scomparsa. Dove devo controllare un cambio di proprietà ora? – Cameron

Problemi correlati