dom中的Ember事件呈现属性

时间:2013-10-07 15:11:55

标签: jquery ember.js

我有一个带模板的标准Ember视图。

模板:

<script type="text/html" data-template-name="template">
  <div id="container">
    <p>{{{view.description}}}</p>
  </div>
</script>

查看:

Em.View.extend({
  templateName: 'OutlookSnapshotInformationTemplate',
  description : "Loooooong text...",
  descriptionChanged : function(){
    $('container').height()
    [...]
  }.observes('description')
}),

我希望使用带有descriptionChanged观察者的JQuery来获取容器 div的维度。

问题是描述值是异步的,并且在呈现页面之前会更新。

在DOM中重新呈现模板中特定属性引发的事件?

2 个答案:

答案 0 :(得分:1)

在观察者的内部,与Ember.run.scheduleOnce()的调用内的DOM进行交互。

http://emberjs.com/api/classes/Ember.run.html#method_scheduleOnce

这可确保在刷新渲染队列后运行给定代码,并且如果您碰巧在当前运行循环中多次更新描述,它将只运行一次:

Ember.run.scheduleOnce('afterRender', this, function () {
  var height = this.$('#container').height();
  // ...
  // profit!
});

答案 1 :(得分:0)

使用视图的didInsertElement方法:

App.YourView = Em.View.extend({
  templateName: 'OutlookSnapshotInformationTemplate',
  description : "Loooooong text...",
  didInsertElement: function() {
    this.set('containerHeight', this.$('#container').height());
    console.log(this.get('containerHeight'));
  }
}),