停止ecm.widget.dialog.ConfirmationDialog的事件

时间:2017-08-03 15:20:14

标签: dojo ibm-content-navigator

我使用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
                    }

                });

1 个答案:

答案 0 :(得分:0)

这不是导致对话框隐藏的事件,而是onExectue本身。

ConfirmationDialog的“dijit / Dialog”超类实际上总是在postCreate期间向onExecute添加.hide()(通过aspect.after) - 在.onExectue链接到'ok'按钮之前。这使得影响函数变得非常困难,因为.hide总是在onExecute之后执行。

我可以想到两个选择:

  1. 在onExecute中抛出异常以中断执行。
  2. 创建自己的BaseDialog实现。这样您就可以完全自由地创建一个按钮,该按钮使用您自己的功能,您可以在其中手动调用.hide。
  3. 显然,第一个解决方案不能被推荐,但它会起作用。第二个是更优雅的解决方案,并允许您编写更漂亮的代码,因为您可以将SimpleTextArea集成到自定义小部件中。

相关问题