Добавление кнопки просмотра загрузки CSV в Ext.Action

Я пытаюсь создать загрузку файла CSV в приложении GeoExt Map. Мне нужно поместить функцию загрузки в Ext.Action, чтобы я мог добавить ее на панель инструментов панели GeoExt. Я пытаюсь реализовать этот пример< /а>. Вот мой код,

    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 продолжает выдавать мне эту ошибку,

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

Я неправильно объявляю функцию в Ext.Action?


person Sam007    schedule 24.09.2012    source источник
comment
Вам удалось это решить? Я сталкиваюсь с теми же проблемами...   -  person avn    schedule 30.06.2015


Ответы (1)


Вы не можете напрямую вставить action в toolbar, так как Ext.Action не является типом Ext.Component. Ext.Action — это, по сути, средство создания уровня абстракции, который можно многократно использовать повторно. Здесь нужно сделать следующее:

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

Из документации:

Действия позволяют вам совместно использовать обработчики, параметры конфигурации и обновления пользовательского интерфейса для любых компонентов, поддерживающих интерфейс действий (в первую очередь компоненты Ext.toolbar.Toolbar, Ext.button.Button и Ext.menu.Menu).

person Varun Achar    schedule 25.09.2012
comment
И тогда как мне добавить функциональность к этой кнопке? - person Sam007; 03.10.2012
comment
Как я сказал в ответе toolbarItems.push(new Ext.button.Button(action)); - person Varun Achar; 04.10.2012
comment
Я обновил код, но ошибка все еще сохраняется. Это все еще дает мне ту же ошибку. Вы можете увидеть ошибку в Firebug, 128.196.142.12/geo/test/test_new.html. - person Sam007; 04.10.2012
comment
Вы не можете использовать new Ext.create(). Это проблема. Должно быть только Ext.create. - person Varun Achar; 05.10.2012
comment
Извините, он все еще не работает. Я обновил код. Он продолжает давать мне ту же ошибку. - person Sam007; 05.10.2012
comment
Привет @VarunAchar все еще застрял на этом - person Sam007; 08.10.2012
comment
Я новичок в ExtJS, можете ли вы привести пример? - person Sam007; 13.10.2012
comment
ответил в чате. Похоже, мы не получаем уведомления, когда в уведомлении есть ответ в чате. chat.stackoverflow.com/rooms/18757/ - person Sam007; 01.11.2012