#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.