在我的Ember.js应用程序中,当我调用ApplicationRoute
动作时,我想从我的openModal
打开一个Bootstrap模式。
我将此作为我的ApplicationRoute
:
module.exports = Em.Route.extend({
actions: {
openModal: function(modalName) {
this.render(modalName, {
into: 'application',
outlet: 'modal'
});
$('#active-modal').modal();
}
}
});
现在我的问题是#active-modal
没有打开,可能是因为在render
调用之后它不存在于DOM中。
我该如何解决这个问题?
答案 0 :(得分:0)
在本文中找到了一个解决方案:http://mavilein.github.io/javascript/2013/08/01/Ember-JS-After-Render-Event/
这是更优雅的解决方案,没有必要重新打开Ember.View
但是它可以在需要时适用于所有视图。
仍然是ApplicationRoute
:
App.ApplicationRoute = Em.Route.extend({
actions: {
showModal: function() {
return this.render('modal', {
into: 'application',
outlet: 'modal'
});
}
closeModal: function() {
return this.disconnectOutlet({
parentView: 'application',
outlet: 'modal'
});
}
}
});
但是现在我们已经覆盖Ember.View
的{{1}}来安排函数调用:
didInsertElement
然后我明确地定义了ModalView并在其上创建了一个afterRenderEvent函数,它找到.modal DOM节点并且瞧!
Em.View.reopen({
didInsertElement: function() {
this._super();
Ember.run.scheduleOnce('afterRender', this, this.afterRenderEvent);
}
});
现场直播:http://emberjs.jsbin.com/yifikuvebivu/1/edit
修改强>
必须手动销毁视图,否则模态不会再次出现:
App.ModalView = Em.View.extend({
afterRenderEvent: function() {
this.$('.modal').modal();
}
});
修改2
有一个更好的解决方案,在使用组件创建模态时是必需的。我已经更新了上面的代码片段。
答案 1 :(得分:-1)
在renderTemplate
Ember.Route钩子方法中进行。
renderTemplate: function() {
$('active-modal').modal();
}