2017-08-03 122 views
0

我正在使用ecm.widget.dialog.ConfirmationDialog并已添加dijit/SimpleTextArea。在点击是按钮时,我正在检查textarea中是否有用户输入的值,如果没有,我想向用户显示一条消息并保留在confirmationDialog上。它显示消息,但事件正在被解雇,流程继续。我甚至试图通过停止活动停止ecm.widget.dialog.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 
        } 

       }); 
+0

尝试使用'evt.stopPropagation()'而不是'dojo.stopEvent(evt)'并在此之后从事件处理程序返回。 – Himanshu

+0

是的,我尝试过,但没有运气 –

回答

0

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

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

我能想到的两个选项:

  1. 抛出一个异常的onExecute打破执行。
  2. 创建您自己的BaseDialog实现。这会给你完全的自由来创建一个按钮,使用你自己的功能,你可以手动调用.hide - 或不。

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