Как я могу сохранить скрытие / отображение / перемещение / изменение размера столбца ExtJS datagrid?

#javascript #events #datagrid #extjs #grid

#javascript #Мероприятия #datagrid #extjs #сетка

Вопрос:

Я хотел бы сделать изменения пользователя в отображении столбца ExtJS datagrid (скрытие, отображение, перемещение, изменение размера) постоянными и сохраненными на сервере. Есть много событий для прослушивания, но регистрация обработчиков в самой сетке, похоже, не приводит к вызову оповещений:

     grid.on('hide', function(event)
        {
        alert('Save column order: column hidden.');
        });
    grid.on('move', function(event)
        {
        alert('Save column order: column moved.');
        });
    grid.on('resize', function(event)
        {
        alert('Save column sizes: column resized.');
        });
    grid.on('show', function(event)
        {
        alert('Save colum order: column shown.');
        });
  

(Мой базовый подход может быть, а может и не быть оптимальным.)

Что конкретно я должен сделать, чтобы прослушивать эти события? Я могу скрывать, показывать, перемещать и изменять размер столбцов без запуска предупреждения.

Комментарии:

1. Это сработало с GridPanel, но у EditorGridPanel возникли проблемы. Есть предложения по панели EditorGridPanel с сохранением состояния?

2. Не обращайте внимания на последний вопрос; мне нужно было установить StateID, и тогда все было хорошо.

Ответ №1:

Сначала вам необходимо настроить поставщика состояния.
CookieProvider — единственный, который встроен в ExtJS

 Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
  

Второй, отметить yourGridPanel.stateful как true

В-третьих, посмотрите, нужно ли изменять значение по умолчанию для GridPanel.stateEvents
По сути, это «Массив событий, которые при запуске должны запускать этот компонент для сохранения его состояния«

В-четвертых, HttpStateProvider не встроен в ExtJS, но у Saki есть ux (пользовательское расширение) для него.

В-пятых, если вы хотите сохранить состояния нескольких компонентов, они должны быть id или stateId заданы явно.

Хорошим подходом было бы заставить это работать должным образом с помощью встроенного CookieProvider, а затем переключиться на Http-провайдера.

Комментарии:

1. Это расширение 2.x, и когда я попытался запустить его из 3.x, я получил сообщение «undefined — это не функция» при попытке создать экземпляр Ext.ux.httpProvider(). Есть какие-нибудь советы по получению порта 3.0?

2. Возможно ли сохранить состояние всех строк сетки?

3. @Shekhar — Состояние сетки зависит от конфигурации сетки. Не с данными хранилища, которые вы видите в строках. вам нужно будет обработать сохранение строк в серверной части и извлечь их, используя параметры для вашего серверного вызова из хранилища.

Ответ №2:

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

Ответ №3:

Настройте сетку с помощью stateful: true и задайте ее stateId (необязательно, если у вашей сетки есть идентификатор, который не изменится). Также инициализируйте внешнее состояние.Менеджер:

 var thirtyDays = new Date(new Date().getTime() (1000*60*60*24*30));
Ext.state.Manager.setProvider(new Ext.state.CookieProvider({expires: thirtyDays}));
  

Хотя это и не включено в Ext 3, вы можете найти онлайн государственного поставщика, который использует HTML5 localStorage вместо файлов cookie.