我正在使用ecm.widget.dialog.ConfirmationDialog
并为其添加了dijit/SimpleTextArea
。单击"是"按钮时,我正在检查用户在textarea
中是否输入了值,如果没有,我想向用户显示一条消息并保持在confirmationDialog
上。它显示消息,但事件被触发,流继续。我什至试图通过以下方式阻止事件
dojo.stopEvent(evt);
但它不起作用。有人可以帮助我如何停止该事件,以便将对话框保留到用户输入值吗?
下面是代码片段
this.msgDialogBox = new ConfirmationDialog();
var textarea = new SimpleTextarea({
rows: "4",
cols: "50",
placeHolder:"Please provide reject reason",
maxLength:"256",
style:"width: 95%; height: 90px;",
required:true
},domConstruct.create("div",{align:'center'},this.msgDialogBox.contentArea));
textarea.startup();
on(this.msgDialogBox,"Execute",function(evt){
if(!textarea.get("value")){
domConstruct.place(domConstruct.create("div",{align:'center',innerHTML:'Reject reason cannot be blank',style:'color:#ff0000'}),this.inlineMessage,"after");
dojo.stopEvent(evt);
}else{
//value is there so perform task
}
});
导致对话框隐藏的并不是事件,而是 onExectue 本身。
ConfirmationDialog 的 "dijit/Dialog" 超类实际上总是在 postCreate 期间向 onExecute 添加一个 .hide(((通过 aspect.after( - 在 .onExectue 链接到 'ok' 按钮之前。这使得很难影响函数,因为 .hide 总是在 onExecute 之后执行。
我可以想到两个选项:
- 在 onExecute 中引发异常以中断执行。
- 创建您自己的基本对话框实现。这将使您可以完全自由地创建一个使用您自己的函数的按钮,您可以在其中手动调用 .hide - 或不调用。
显然,第一个解决方案很难推荐,但它会起作用。第二个是更优雅的解决方案,允许您编写更漂亮的代码,因为您可以将SimpleTextArea集成到自定义小部件中。