当有人试图离开具有不完整表单的页面时,我正在尝试打开模式对话框。我已经构建了模态模板,但我无法弄清楚如何实现它。这就是我所拥有的:
actions: {
willTransition: function( transition ){
var model = this.currentModel;
if( model.get( 'isDirty' ) ){
this.render( 'my-modal', {
into: 'application',
outlet: 'modal'
} );
if(!this.get(abortConfirmed) {
transition.abort();
} else {
model.rollback();
}
}
}
}
注意:脏检查有效,我可以生成提示,但这种模态不起作用
答案 0 :(得分:1)
所以这就是我使用的工作流程。
1)。在willTransition(transition)
钩子中,检查是否应该显示模态。
2)。如果您应该显示模态(在您的情况下,当模型isDirty
时),请致电transition.abort()
。您必须这样做以防止转换发生。您还需要控制器上的第二个属性来确定转换是否已获得授权。实际上,您检查model.get('isDirty) && this.controller.get('transitionAuthorized')
3)。您需要一种方法将状态传递给模态或模式,以便能够与创建模态的页面进行通信。我亲自将continueFn
和cancelFn
传递给关闭当前上下文的模态。像
var continueFn = this.createUnsavedDialogContinueFn(this, transition);
该功能是:
createUnsavedDialogContinueFn: function(context, transition){
return function(){
context.controller.set('transitionAuthorized', true);
transition.retry();
}
}
我将此continueFn
传递给模式,其I don't care if I have Pending changes
按钮通过操作调用。但是,如果您感觉更轻松,可以将此工作委托给控制器/路径。重要的是,您将transitionAuthorized
设置为true
并致电transition.retry()
4)。调用transition.retry
会通过willTransition
传回,但这次你将transitionAuthorized
设置为true并且所有内容都会通过。
答案 1 :(得分:0)
您需要停止发生转换。在'isDirty'检查的底部添加transition.abort()。