2

通常のテキストフィールドではなく、数値フィールドを使用してMessageBox.promptを表示しようとしています。新しいMessageBoxを作成することができなかったので、代わりにバリデーターを使用することにしましたが、それにも問題があります。

したがって、MessageBoxの数値バリデーター、またはテキストフィールドの代わりに数値フィールドを持つMessageBoxのいずれかで、何でも機能します。

これが私のメッセージボックスです...

var msgbox = Ext.Msg.prompt('Quantity', 'Enter a number',function(btn, text){} )

これについて何かアイデアはありますか?

アップデート

バリデーターを機能させることができましたが、テキストフィールドではなく数値フィールドを使用したいので、質問の最初の部分はまだ残っています。

ExtJSのMessageBox.promptでテキストフィールドの代わりに数値フィールドを表示するにはどうすればよいですか。

4

2 に答える 2

5

彼は「ハック」なしでは成し遂げられないようです。Ext.Msgはシングルトンであり、initComponentでテキストフィールドが設定されており、構成できません。 http://docs.sencha.com/ext-js/4-1/source/MessageBox.html#Ext-window-MessageBox-method-initComponent

これはシングルトンであるため、オーバーライドは機能せず、問題の適切な解決策ではありません。

Messageboxの拡張機能は機能するはずですが、MessageBoxコードには多くのフックがないため、Extのアップグレードごとにコードを確認する必要があります。

Ext.define('NumberPrompt', {
    extend: 'Ext.window.MessageBox',
    initComponent: function() {
        this.callParent();
        var index = this.promptContainer.items.indexOf(this.textField);
        this.promptContainer.remove(this.textField);
        this.textField = this._createNumberField();
        this.promptContainer.insert(index, this.textField);
    },

    _createNumberField: function() {
        //copy paste what is being done in the initComonent to create the textfield
        return new Ext.form.field.Number({
                        id: this.id + '-textfield',
                        anchor: '100%',
                        enableKeyEvents: true,
                        listeners: {
                            keydown: this.onPromptKey,
                            scope: this
                        }
        });
    }
});



var msgbox = new NumberPrompt().prompt('Quantity', 'Enter a number',function(btn, text){} )
于 2012-12-15T23:48:51.520 に答える
3

次の(ハック?)は、私の特定のケースで機能します。注-Ext.MessageBoxは(おそらく)グローバルオブジェクトであるため、数値フィルタリング以外が必要な後続のコンテキストで使用するには、リセットする必要があります。

var mbtext = Ext.MessageBox.textField;
mbtext.maskRe = /[0-9:]/;
mbtext.regex = /[0-9]+(:[0-9]+)?/;
Ext.MessageBox.prompt('Numeric Only', 'Enter a number: ', function(btn, text) {
  if (btn !== 'ok') return;
  if (! text) return; 
  // ... now do the work with the numeric result in text
});
于 2013-11-20T02:15:45.237 に答える