Лучший способ использовать флажки внутри сводной сетки Extjs - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть сводная сетка, которая отображается, если у пользователей есть разрешения на создание, чтение, обновление, удаление, пользователи группируются таким образом, отделы> учреждения> сектора> пользователи, и я хочу, чтобы пользователь мог редактировать эти поля. .

Я уже пробовал использовать с рендерером:

aggregate: [{
    renderer: function(value, record, dataIndex, cell, column) {
        var id = Ext.id();
        Ext.defer(function() {
            Ext.widget('checkbox', {
                renderTo: id,
                checked: value,
                listeners: {
                    change: {
                        fn: function(event, target) {
                            //some function here
                        }
                    }
                }
            });
        }, 100);
        return Ext.String.format('<div id="{0}"></div>', id);
    },
    aggregator: 'aggCheckBoxR',
    dataIndex: 'Incluir',
    header: 'Incluir'
}]

и со столбцом виджета:

aggregate: [{
    aggregator: 'aggCheckBoxR',
    column: {
        xtype: 'widgetcolumn',
        widget: {
            xtype: 'checkbox',
            listeners: {
                change: function(cb) {
                        //some function here
                }
            }
        }
    },
    dataIndex: 'Incluir',
    header: 'Incluir'
}]

Мой агрегатор:

aggCheckBoxR: function(records, measure, matrix, rowGroupKey, colGroupKey) {
    if (records.length > 1) {
        let checkAllTrue = true;
        for (var i = 0; i < records.length; i++) {
            if (records[i].get('Incluir') === false || records[i].get('Incluir') === 0) {
                checkAllTrue = false;
            }
        }
        return checkAllTrue;
    } else {
        return records[0].get('Incluir');
    }
}

Флажок отображается в сетке, но моя проблема в том, что данные «не сохраняются», когда я разворачиваю или сворачиваю левую ось в сводной сетке, значение флажка возвращается к исходному значению, как я могу сохранить эти данные?

Уже пробовал обновить инструкцию вручную

change: function(cb) {
    var nomeCmp = cb.getWidgetRecord().data._compactview_;
    Ext.getStore('acesso.ColabStore').findRecord('Nome', nomeCmp).data.Incluir = true;
}

Но, тем не менее, это не работает.

EDIT : пришлось изменить прослушиватель событий объекта столбца на:

{
    xtype: 'widgetcolumn',
    widget: {
        xtype: 'checkbox',
        listeners: {
            afterrender: function(component, eOpts) {
                console.log('after,render');
                component.getEl().on('change', function(e, el) {
                    console.log('change func here');
                })
            }
        }
    }
}

При этом событие изменения срабатывает только тогда, когда пользователи устанавливают флажок, и, наконец, я могу использовать Норбека ответ

1 Ответ

1 голос
/ 15 апреля 2019

Вы можете обновить запись вручную, используя:

record.set('Incluir',true);

и если вы не хотите отправлять изменения на сервер:

record.commit();

...