ExtJS - Как получить addCls() и removeCls(), чтобы показать изменения

Я пытаюсь динамически установить отступы на панели сетки, на которой отображаются некоторые данные. В случае, если мой флажок был нажат, он должен применить отступы cls.

Вот соответствующий код ExtJS:

var permissionsGrid = Ext.create('Ext.grid.Panel', {
    //...
    items: [{
        xtype: 'checkbox',
        name: 'EditRoles',
        boxLabel: 'Edit User Roles',
        handler: function(field, value) {
            userRoleFilter = '';
            permissionsGrid.removeCls('permissions_panel_nopadding');
            console.log(permissionsGrid.hasCls('permissions_panel_nopadding'));
            permissionsGrid.addCls('permissions_panel_padding');
            console.log(permissionsGrid.hasCls('permissions_panel_padding'));
        }
    }],
    //...
});

Вот мой CSS

.permissions_panel_nopadding {
    padding: 0px;
 }

.permissions_panel_padding {
    padding: 5px;
 }

Когда флажок установлен, в настоящий момент ничего не происходит. Я пытался использовать:

permissionsGrid.getView().refresh();

... но не превалировать.

1 ответ

Вы всегда удаляете один класс и всегда добавляете другой класс. Вам нужно "переключить" классы. Если вам не нужны специальные стили, когда флажок не установлен, вы должны добавить / удалить только один класс.

handler: function(field, value) {
    userRoleFilter = '';
    if ( value === true) {
        permissionsGrid.removeCls('permissions_panel_nopadding');
        permissionsGrid.addCls('permissions_panel_padding');
    }
    else {
        permissionsGrid.addCls('permissions_panel_nopadding');
        permissionsGrid.removeCls('permissions_panel_padding');
    }
    console.log(permissionsGrid.hasCls('permissions_panel_padding'), permissionsGrid.hasCls('permissions_panel_nopadding'));
}

Вот моя скрипка с базовой панелью и только одним классом CSS: https://fiddle.sencha.com/

Другие вопросы по тегам