Javascript 在Ember.js中,如何在渲染到outlet后显示引导模式

Javascript 在Ember.js中,如何在渲染到outlet后显示引导模式,javascript,twitter-bootstrap,ember.js,Javascript,Twitter Bootstrap,Ember.js,在我的Ember.js应用程序中,我希望在调用OpenModel操作时从ApplicationRoute打开引导模式 我将此作为我的应用程序路径: 现在我的问题是活动模式没有打开,可能是因为它在渲染调用之后不存在于DOM中 我该如何解决这个问题 演示:在renderTemplate Ember中执行。路由钩子方法 renderTemplate: function() { $('active-modal').modal(); } 在本文中找到了一个解决方案: 这是一个更优雅的解决方案,不

在我的Ember.js应用程序中,我希望在调用OpenModel操作时从ApplicationRoute打开引导模式

我将此作为我的应用程序路径:

现在我的问题是活动模式没有打开,可能是因为它在渲染调用之后不存在于DOM中

我该如何解决这个问题

演示:

在renderTemplate Ember中执行。路由钩子方法

renderTemplate: function() {
    $('active-modal').modal();
}

在本文中找到了一个解决方案:

这是一个更优雅的解决方案,不需要重新打开Ember.View,但它可以在需要时适用于所有视图

仍然使用相同的应用程序路径:

但现在我们已经覆盖了Ember.View的didInsertElement来安排函数调用:

Em.View.reopen({
  didInsertElement: function() {
    this._super();
    Ember.run.scheduleOnce('afterRender', this, this.afterRenderEvent);
  }
});
然后我明确定义了ModalView,并在此基础上创建了一个afterRenderEvent函数,用于查找.modal DOM节点,瞧

App.ModalView = Em.View.extend({
  afterRenderEvent: function() {
    this.$('.modal').modal();
  }
});
现场观看:

编辑

必须手动销毁视图,否则模式将不会再次出现:

App.ModalView = Em.View.extend({
  var this = self;
  afterRenderEvent: function() {
    this.$('.modal')
        .on('hidden.bs.modal', function() {
          self.triggerAction({
            action: 'closeModal'
          });
        })
        .modal();
  }
});
编辑2


有一个更好的解决方案,这在使用组件创建模态时是必需的。我已经更新了上面的代码片段。

采用哪种方式?你能更新你建议的jsbin吗?无论你打开哪个路径。加载Dom后会调用Rendertemplate钩子,因此jquery将拾取它。正如我所料,它会破坏呈现:您应该阅读以下内容:@NicholasJohn16谢谢,我已经这样做了。他们的示例显示了渲染时的模态。然而,当DOM节点存在时,引导模式需要以编程方式打开。
App.ModalView = Em.View.extend({
  afterRenderEvent: function() {
    this.$('.modal').modal();
  }
});
App.ModalView = Em.View.extend({
  var this = self;
  afterRenderEvent: function() {
    this.$('.modal')
        .on('hidden.bs.modal', function() {
          self.triggerAction({
            action: 'closeModal'
          });
        })
        .modal();
  }
});