8

我在我的应用程序中使用 Ember.js,但是有一点我更新了视图上下文(控制器)的属性,但是在更新之后,有一个解析器(MathJax)查看要解析的更新字段的 dom把它变成数学。然而,即使更新正在发生,它也会发生在 mathjax 查找更新之后。我需要做的是强制 ember 更新视图或等待 ember 更新,然后我告诉 mathjax 解析 html。有没有办法做到这一点?

4

1 回答 1

17

这是一个相当常见的用例。要指定应在属性更改传播后执行的代码,请使用观察者。Ember 在成功传播更改后触发观察者。例如:

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 管理异步指南和 Ember.run 的 API 文档:http: //emberjs.com/guides/understanding-ember/managing-asynchrony/ http://emberjs.com/api/classes/Ember.run.html #method_next

于 2013-01-07T03:15:09.390 回答