4

ユーザーがテキストを入力できる MessageBox を作成しました。

Ext.MessageBox.show({
    title : 'Reason',
    msg : 'Your reson:',
    width : 300,
    buttons : Ext.MessageBox.OKCANCEL,
    multiline : true,
    scope : this,
    fn : function(btn, reason){ if (btn == 'ok' && reason != '') this.rejectPlan(rec, reason);}
});

ユーザーはそれを見て理由を入力することができますが、今私にできることは、入力したテキストが空でないかどうかを確認することだけです。

ユーザーがテキストを入力するまで[OK]ボタンをブロックしたい(最小20文字としましょう)

バリデーターを MessageBox に追加できますか? またはウィンドウを拡張するカスタム コンポーネントを作成する必要がありますか?

4

3 に答える 3

5

実際には可能ですが、機能させるには多少の努力が必要かもしれません。これはかなり「ハックな」方法なので、余談でこれを使用してください。

    var messageBox = Ext.MessageBox.show({
            title: 'Type Something in!',
            msg: 'Please type something into the text box!',
            width: 300,
            buttons: Ext.MessageBox.OKCANCEL,
            multiline: true,
            fn: function(btn, text, config) {
                //Do your thing
            },
    });

    messageBox.msgButtons.ok.setDisabled(true);
    messageBox.textArea.allowBlank = false;
    messageBox.textArea.on('change', function (e, text, o) {
        if (text.length > 0) {
            messageBox.msgButtons.ok.setDisabled(false);
        } else {
            messageBox.msgButtons.ok.setDisabled(true);
        }
    });

メッセージボックスを表示した後、メッセージボックスへの参照を取得できます。テキスト ボックスが作成されて表示されると、[OK] ボタンは無効になり、テキスト領域は空白の値を許可しないように設定されます。また、テキスト領域にテキストがあるかどうかをチェックして、OK ボタンを有効にするか無効にするかを決定するイベント ハンドラーをアタッチしました。

この種の「回避策」は、API の変更の影響を非常に受けやすいため、注意してください。

于 2015-03-24T19:58:06.853 に答える
3

メッセージボックスの構成を表す opts パラメータを fn に追加し、テキストが空の場合は同じ構成でメッセージボックスを再度開くことができます。

Ext.MessageBox.show({
    title : 'Reason',
    msg : 'Your reason:',
    width : 300,
    buttons : Ext.MessageBox.OKCANCEL,
    multiline : true,
    scope : this,
    fn : function(btn, reason, cfg){ 
         if (btn == 'ok' && Ext.isEmpty(reason)) { 
            //if you want to mark the text as mandatory

            Ext.MessageBox.show(Ext.apply({}, {msg:cfg.msg}, cfg));  
         } else if (btn =='ok') {
            alert('ok with text');                 
         }
    }
});
​
于 2012-07-04T14:34:19.117 に答える