2017-08-03 93 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集成到您的自定義小部件中。