2013-12-10 24 views
0

我正在研究一个Ember项目,并且我有一个按钮将一些HTML标记插入到DOM中。我想调用一个JavaScript函数在加载这些新的DOM元素时运行。这是我的代码:如何在使用Ember动态显示的元素上运行js函数?

<script type="text/x-handlebars" id="doc">  
     {{#if isEditing}} 
      {{partial 'doc/editbox'}} 
     {{/if}} 
     ... 
    </script> 

部分doc/editbox只包含一些html标记。

我试着运行javascript作为启动插入的单击按钮事件的一部分,但js不工作,因为DOM元素还不存在。我看到这篇文章: How to Run Some JS on an Element in the Index Template in Ember.js RC2 建议使用Ember.run.next,但是由于View'Doc'原本没有这些额外的DOM元素(直到点击按钮)才出现,所以无法工作。如何让javascript函数在正确的时间运行?

回答

1

添加控制器

watchEditing: function(){ 
    if (this.get('isEditing')){ 
    Ember.run.scheduleOnce('afterRender', function(){ 
     //do it here 
    }); 
    } 
}.observes('isEditing') 

的观察还可以使用的,而不是renderpartial创建关联的视图,该视图的didInsertElement运行它。

+0

这工作就像一个魅力。为什么只有当我把它放在控制器而不是视图中时才起作用? – ikesultan

+0

您可以将它放在视图中,只需将其从isEditing更改为controller.isEditing即可。这是你的意思吗? – Kingpin2k

+0

通过查看,我的意思是Ember.View.extend({...})中的代码。无论如何,有没有理由为什么它应该在控制器中,而不是视图,还是它没有影响? – ikesultan