2012-12-15 2 views
2

일반 텍스트 필드 대신 숫자 필드를 사용하여 MessageBox.prompt를 표시하려고합니다. 대신 새 유효성 검사기를 사용하기로 결정 했으므로 새 MessageBox를 만들 수는 없었습니다.하지만 일부 문제가 너무 있습니다.ExtJS의 NumberField 프롬프트

아무 것도 나를 위해, MessageBox에 대한 번호 유효성 검사기 또는 텍스트 필드 대신 숫자 필드가있는 MessageBox 작동합니다. 여기

내 메시지 박스가의 ...

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

이것에 대한 어떤 아이디어?

UPDATE 나는 발리의 작업을 얻을 수 있었다,하지만 난 차라리 대신 텍스트 필드의 numberfield있을 것입니다, 그래서 질문의 첫 번째 부분은 최대 아직도있다.

ExtJS의 MessageBox.prompt에 텍스트 필드 대신 숫자 필드를 표시하려면 어떻게해야합니까?

답변

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){}) 
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 
}); 
+0

var oldMBText = Ext.MessageBox.textField; 이 블록 앞에 ... Ext.MessageBox.textField = oldMBText; 이 블록 후에 .. –