0

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

                });
4

1 回答 1

0

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

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

我可以想到两个选择:

  1. 在 onExecute 中抛出异常以中断执行。
  2. 创建您自己的 BaseDialog 实现。这将使您完全自由地创建一个使用您自己的功能的按钮,您可以在其中手动调用 .hide - 或不。

显然,第一个解决方案很难被推荐,但它会起作用。第二个将是一个更优雅的解决方案,并允许您编写更漂亮的代码,因为您可以将 SimpleTextArea 集成到您的自定义小部件中。

于 2017-12-15T10:08:30.953 回答