Получение модели из GridPanel в ExtJS - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть сеточная панель, которая позволяет встроенное редактирование столбца. В этом столбце в качестве редактора используется поле со списком, и ни событие «изменение», ни событие «выбор» не дают мне чего-либо пригодного для возврата отредактированного значения для получения измененной строки из панели сетки.

Я считаю, что Ext плавает в поле со списком редактора, поэтому я не могу сделать что-то простое, как

combo.up()

Для возврата в сетку.

Вот панель сетки из вида:

{
    xtype: 'gridpanel',
    title: 'Important Projects',
    id: 'importantProjectsGrid',
    dockedItems: [],
    flex: 1,
    columns: [
        { header: 'Quote Name', dataIndex: 'QuoteName', flex: 4 },
        { header: 'Quote Status', dataIndex: 'QuoteStatusID', flex: 6, editor: {
            xtype: 'combobox',
            editable: false,
            action: 'QuoteStatus',
            selectOnTab: true,
            store: 'statuses',
            queryMode: 'local',
            displayField: 'Description',
            valueField: 'Description'
        } }
    ],
    store: 'myimpprojects',
    selModel: {
        selType: 'cellmodel'
    },
    plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
        clicksToEdit: 1
    })]
}

Вот код контроллера, относящийся к этому:

init: function () {
    this.control({
        '[action=QuoteStatus]': {
            change: function (combo, new_value, old_value, opts) {
                // I need to go back up from this combobox
                // to get the row that this value was edited in
                // to grab an ID value from that row's data
                // in order to make an ajax request
            }
        }
    });
},

Спасибо за любую помощь!

Ответы [ 3 ]

2 голосов
/ 14 февраля 2012

Вы можете отслеживать события магазина update.

init: function () {
    this.getMyimpprojectsStore().on('update', function(store, record) {
        // do something with record
    });
    // ...
},
1 голос
/ 14 февраля 2012

Попробуйте включить прослушиватель в плагин CellEditing.Существуют события для beforeedit, edit и validateedit, которые получают объект, содержащий ссылки на сетку, индексы записи, поля, строки и столбца и многое другое.Вы должны быть в состоянии проверить поле со списком в обработчике событий и обработать вашу информацию оттуда.

Быстрая ссылка на страницу документа: Ext.grid.plugin.CellEditing

1 голос
/ 14 февраля 2012

Я убежден, что плагин обновления будет обрабатывать обновление автоматически через API основного хранилища и автоматически публиковать данные на сервере, если прокси-сервер использует autoSync для true.

Пример настроенного прокси:

Ext.define('MyApp.store.YourStore', {
extend: 'Ext.data.Store',

model: 'MyApp.model.YourGridModel',
autoSync: true, //Commits the changes realtime to the server
proxy: {
    type: 'ajax',
    batchActions : true, //Commits the changes everytime a value is changed if true o otherwise store the changes and batch update them in 1 single post
    api: {
        read: 'path/to/select',
        create: 'path/to/create',
        update: 'path/to/update',
        destroy: 'path/to/delete'
    },
    reader: {
        type: 'json',
        root: 'results',
        successProperty: 'success'
    },
    writer: {
        type: 'json',
        writeAllFields: true
    },
    listeners: {
        exception: function(proxy, response, operation){

            Ext.MessageBox.show({
                title: 'REMOTE EXCEPTION',
                msg: operation.getError(),
                icon: Ext.MessageBox.ERROR,
                buttons: Ext.Msg.OK
            });
        }
    }
},
listeners: {
    write: function(proxy, operation){

        var response = Ext.JSON.decode(operation.response.responseText);

        if(response.success == true)
        {        
            //TODO: Proxy - Messageboxes might be a little anoying we might instead use the status bar in teh grid or something so show status of the operation
            Ext.MessageBox.show({
                title: this.xFileLibraryTitle,
                msg: response.message,
                icon: (response.success == true)? Ext.MessageBox.INFO : Ext.MessageBox.ERROR,
                buttons: Ext.Msg.OK
            });
        }
    }
}

});

Я бы специально искал две конфигурации: "autoSync" и "batchActions"

Надеюсь, это поможет вам в решении вашей проблемы!

...