extjs - एक्स्टजएस में नंबरफिल्ड प्रॉम्प्ट




messagebox prompt (2)

ऐसा लगता है कि उसके बिना "हैक" के बिना नहीं किया जा सकता है Ext.Msg एक सिंगलटन है और initComponent में टेक्स्ट फ़ील्ड सेट है और यह कॉन्फ़िगर करने योग्य नहीं है। http://docs.sencha.com/ext-js/4-1/source/MessageBox.html#Ext-window-MessageBox-method-initComponent

चूंकि यह सिंगलटन है एक ओवरराइड काम नहीं करेगा और यह समस्या का एक अच्छा समाधान नहीं है।

संदेश बॉक्स का एक एक्सटेंशन कार्य करना चाहिए, लेकिन संदेश को प्रत्येक एक्सटेंशन अपग्रेड पर देखना होगा क्योंकि संदेश बॉक्स कोड में कई हुक नहीं हैं।

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){} )

मैं एक नियमित पाठ फ़ील्ड के बजाय एक संख्याफ़ील्ड के साथ एक MessageBox.prompt दिखाने का प्रयास कर रहा हूं। मैं एक नया संदेशबॉक्स बनाने के आसपास नहीं जा सका, इसलिए मैंने इसके बजाय सिर्फ एक वैधक का उपयोग करने का निर्णय लिया, लेकिन मुझे इसके साथ कुछ परेशानी भी हो रही है।

तो कुछ भी मेरे लिए काम करेगा, या तो संदेशफ़ील्ड के बजाय नंबरफ़ील्ड के साथ संदेश बॉक्स या संदेश बॉक्स के लिए एक नंबर सत्यापनकर्ता।

यहाँ मेरा संदेश बॉक्स है ...

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

इसके लिए कोई विचार?

अद्यतन करें

मैं वैधीकृत काम करने में कामयाब रहा, लेकिन मैं एक टेक्स्टफ़ील्ड के बदले एक नंबरफील्ड के बजाय होगा, इसलिए सवाल का पहला भाग अभी भी ऊपर है

मैं एक संदेश फील्ड के बजाय एक संदेशफ़ील्ड दिखाने के लिए कैसे प्राप्त कर सकता हूं।


निम्नलिखित (हैक?) मेरे विशिष्ट मामले में काम करता है: नोट - एक्स्ट। मेसेजबॉक्स (संभाव्यतः) एक वैश्विक वस्तु है, इसलिए इसे बाद के संदर्भ में रीसेट किया जाना चाहिए जहां संख्यात्मक फ़िल्टरिंग की आवश्यकता है।

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
});