file-upload extjs csv openlayers extjs3

file upload - Agregar el botón de búsqueda de carga de CSV a Ext.Action



file-upload extjs (1)

Intento crear una carga de archivo CSV en la aplicación GeoExt Map. Necesito ubicar la función de carga dentro de Ext.Action, para poder agregarla a la barra de herramientas del panel de GeoExt. Estoy tratando de implementar este ejemplo . Aquí está mi código,

action = new Ext.Action({ text: "Upload Excel", control: Ext.create(''Ext.form.Panel'', { title: ''Upload a CSV File'', width: 400, bodyPadding: 10, frame: true, renderTo: Ext.getBody(), items: [{ xtype: ''filefield'', name: ''csv'', fieldLabel: ''CSV Upload'', labelWidth: 50, msgTarget: ''side'', allowBlank: false, buttonText: ''Select CSV File'' }], buttons: [{ text: ''Upload'', handler: function () { var form = this.up(''form'') .getForm(); if (form.isValid()) { form.submit({ url: ''file-upload.py'', waitMsg: ''Uploading the CSV File...'', success: function (fp, o) { Ext.Msg.alert(''Success'', ''Your csv file "'' + o.result.file + ''" has been uploaded.''); } }); } } }] }), map: map, // button options tooltip: "Upload CSV File", // check item options group: "newTool" }); actions["upCSV"] = action; toolbarItems.push(new Ext.button.Button(action));

Firebug me sigue dando este error,

TypeError: b[d.xtype || e] is not a constructor

¿Estoy declarando la función incorrectamente dentro de Ext.Action?


No puede insertar directamente la action en una toolbar ya que Ext.Action no es un tipo de Ext.Component . Una Ext.Action es básicamente un medio para crear una capa de abstracción que puede reutilizarse varias veces. Aquí debes hacer lo siguiente:

toolbarItems.push(new Ext.button.Button(action));

De la documentación :

Las acciones le permiten compartir controladores, opciones de configuración y actualizaciones de UI en cualquier componente que admita la interfaz de Acción (principalmente componentes Ext.toolbar.Toolbar, Ext.button.Button y Ext.menu.Menu)