rowexpander - sencha extjs online
Indicador NumberField en ExtJS (2)
Estoy tratando de mostrar un MessageBox.prompt con un campo de número en lugar de un campo de texto normal. No pude ir creando un nuevo MessageBox, así que decidí usar un validador en su lugar, pero también estoy teniendo problemas.
Entonces, cualquier cosa funcionará para mí, ya sea un validador de número para un MessageBox o un MessageBox con un campo de número en lugar de un campo de texto.
Aquí está mi MessageBox ...
var msgbox = Ext.Msg.prompt(''Quantity'', ''Enter a number'',function(btn, text){} )
Alguna idea para esto?
ACTUALIZAR
Logré que el validador funcionara, pero preferiría tener un campo numérico en lugar de un campo de texto, por lo que la primera parte de la pregunta aún está activa.
¿Cómo puedo mostrar un campo numérico en lugar de un campo de texto en un MessageBox.prompt en ExtJS?
Los siguientes (¿pirateo?) Funcionan en mi caso específico: Nota: dado que Ext.MessageBox es (presumiblemente) un objeto global, debe restablecerse para ser utilizado en un contexto posterior en el que se requiera otro que no sea el filtrado numérico.
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
});
Parece que no se puede hacer sin un "truco". Ext.Msg es un singleton y en initComponent el campo de texto está configurado y no es configurable. http://docs.sencha.com/ext-js/4-1/source/MessageBox.html#Ext-window-MessageBox-method-initComponent
Como es un singleton, una anulación no funcionará y no es una buena solución al problema.
Una extensión de Messagebox debería funcionar, pero el código tendrá que examinarse en cada actualización de Ext ya que el código de MessageBox no tiene muchos enlaces.
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){} )