Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.07.2011, 17:37
Аспирант
Отправить личное сообщение для Allan Stark Посмотреть профиль Найти все сообщения от Allan Stark
 
Регистрация: 24.04.2010
Сообщений: 87

Отправка данных формы, получение в ответ данных в сторедж
ExtJS 4.0.x

Есть окно, в нем форма (несколько полей: два date и 8 checkbox-ов), докированная к гриду.
Грид связан с стореджем (ajax/php/mysql).
Форма по замыслу должна играть роль фильтра: модифицировать запрос к стореджу и загружать отобранные по условию данные в грид.

Вопрос. Как это сделать ?
Форма отправляет значения полей, но ее функция в success принимает только примитивные ответы от сценария и не дает возможность модифицировать запрос к стореджу.
Сторедж умеет только загружать данные.
Нечто похожее умеет делать компонент пейджинга для грида - он отправляет начальную позицию выборки и ее длину.
Как быть ?

Последний раз редактировалось Allan Stark, 27.07.2011 в 17:40.
Ответить с цитированием
  #2 (permalink)  
Старый 28.07.2011, 10:33
Аспирант
Отправить личное сообщение для Black_Prince Посмотреть профиль Найти все сообщения от Black_Prince
 
Регистрация: 11.07.2011
Сообщений: 64

Если корректно понял вопрос - то по сабмиту формы нужно будет обновлять грид...

Делается это так:
//form ajax submit
                form.getForm().submit(
                {
                    //function to be executed on answer receipt
                    success: function(f,a)
                    {
                        //reconfiguring grid store
                        store = Ext.create('Ext.data.ArrayStore',
                        {
                            data: a.result.rows,
                            model: 'Calls'
                        });
                        //reconfigurinf grid
                        grid.reconfigure(store);
                    },
                    failure: function(f,a)
                    {
                    }
                })


Ограничение - приходимый ответ должен быть в json формате под соответствующую модель

echo '{success: true, rows:'.$call_info.", total: ".$total[0]['cnt']."}";

Пример модели и приходимого ответа от сервера представлять не буду, по скольку там более 20 колонок получается.

Возможно я не правильно понял вопрос, и надо просто применять фильтры. Тогда может стоит сохранить дату для стореджа, и переконфигурировать сторедж применяя к нему filters???
Ответить с цитированием
  #3 (permalink)  
Старый 29.07.2011, 13:29
Аспирант
Отправить личное сообщение для Allan Stark Посмотреть профиль Найти все сообщения от Allan Stark
 
Регистрация: 24.04.2010
Сообщений: 87

Нет, к сожалению задача стоит немного не так.

Представьте, что грид отображает некоторые данные, в моем случае это логи системы одного вебприложения.
Логи должны фильтроваться по дате и по коду. Дата указывается двумя дейтфилдами, код - набором чекбоксов.

В зависимости от настроек должен формироваться соотв. запрос к стореджу, чтобы вытащить из таблицы БД нужную выборку.
Ответить с цитированием
  #4 (permalink)  
Старый 29.07.2011, 20:42
Аспирант
Отправить личное сообщение для nikolaich Посмотреть профиль Найти все сообщения от nikolaich
 
Регистрация: 16.03.2009
Сообщений: 33

Если нужна фильтрация данных на сервере то задайте:
remoteFilter: true
затем выполните
store.filter("email", /\.com$/);
Ну я думаю, что смысл параметров метода filter() Вы посмотрите в документации.

Если, что не так написал, то извините. С 4-й версией еще не разбирался толком.
Точнее мог бы описать для 3-й версии.
Ответить с цитированием
  #5 (permalink)  
Старый 01.08.2011, 23:08
Аспирант
Отправить личное сообщение для Allan Stark Посмотреть профиль Найти все сообщения от Allan Stark
 
Регистрация: 24.04.2010
Сообщений: 87

Сообщение от nikolaich Посмотреть сообщение
Если нужна фильтрация данных на сервере то задайте:
remoteFilter: true
затем выполните
store.filter("email", /\.com$/);
Ну я думаю, что смысл параметров метода filter() Вы посмотрите в документации.

Если, что не так написал, то извините. С 4-й версией еще не разбирался толком.
Точнее мог бы описать для 3-й версии.
Я рассматривал эту возможность, но к сожалению данный метод работает только для уже загруженной в сторедж выборки. Т.е. оперирует уже с массивом в памяти.
А мне нужно, чтобы на сервер отправлялись настройки фильтра выборки и в ответ серверный сценарий возвращал нужный массив данных.
В логах могут быть многие тысячи записей, а правильным образом настроив SQL запрос нужно вернуть всего лишь несколько десятков строк, неразумно тащить всю таблицу логов чтобы фильтровать ее на стороне клиента.

Еще раз повторю задачу.
Есть окно, в нем отображается грид. Грид отображает строки логов вебприложения.
Вверху грида есть настройки фильтра: два дэйтбокса (позволяют выбрать временной интервал) и десяток чекбоксов фильтрации логов по типу события.
При нажатии на кнопку обновления на сервер должен отсылаться запрос, параметрами которого будут настройки фильтра. В ответ серверный сценарий должен вернуть в сторедж грида выборку данных, сторедж должен сделать релоад.

Последний раз редактировалось Allan Stark, 01.08.2011 в 23:12.
Ответить с цитированием
  #6 (permalink)  
Старый 02.08.2011, 10:21
Аспирант
Отправить личное сообщение для nikolaich Посмотреть профиль Найти все сообщения от nikolaich
 
Регистрация: 16.03.2009
Сообщений: 33

Сообщение от Allan Stark Посмотреть сообщение
Я рассматривал эту возможность, но к сожалению данный метод работает только для уже загруженной в сторедж выборки. Т.е. оперирует уже с массивом в памяти.
А мне нужно, чтобы на сервер отправлялись настройки фильтра выборки и в ответ серверный сценарий возвращал нужный массив данных.
И что с remoteFilter: true, тоже не работает? Я смотрел исходники ExtJS, должно работать.

В любом случае, для выполнения вашей задачи необходимо подменять параметры которые передаются в метод load() класса store, а затем используя этот новый набор параметров модифицировать свой запрос на сервере, который и будет вам возвращать новый, отфильтрованный набора данных. В третьей версии я такую задачу выполняю меняя значения baseParams. В четвертой точно не знаю. Но судя по исходникам ExtJS, вариант, который я описал в предыдущем топике, должен работать.
Ответить с цитированием
  #7 (permalink)  
Старый 22.08.2011, 13:59
Аспирант
Отправить личное сообщение для Allan Stark Посмотреть профиль Найти все сообщения от Allan Stark
 
Регистрация: 24.04.2010
Сообщений: 87

Извиняюсь за длительную задержку, отдыхал от трудов тяжких :-)

Да, действительно, при включении remoteFilter на сервер идет строка в JSON виде в поле filter (типа filter:[{"property":"log_type","value":"5"}]), которую затем нужно будет разбирать (в моем случае с PHP - json_decode в соотв. массив).

А есть способ ЕЩЕ проще это делать ? Чтобы параметр передавался в сценарий простым полем "а-ля форма" в GET запросе по аналогии с параметрами page, start и limit, отсылаемыми гридом для пейджинга ?

Чтобы не засорять код ненужными ф-циями декодирования параметров...

Хотя конечно при множественном фильтре оно самое то - в одной строке передаются все флаги одним махом.

Последний раз редактировалось Allan Stark, 22.08.2011 в 14:01.
Ответить с цитированием
  #8 (permalink)  
Старый 22.08.2011, 16:08
Аспирант
Отправить личное сообщение для Allan Stark Посмотреть профиль Найти все сообщения от Allan Stark
 
Регистрация: 24.04.2010
Сообщений: 87

Обнаружил не то баг, не то фичу удаленной фильтрации:
http://www.sencha.com/forum/showthre...765#post639765

Вкратце: если к созданному стореджу несколько раз применять вызов его метода filter(), то старый фильтр не затирается, а "добавляется" к новому. Метод clearFilter() лечит проблему, но порождает лишний нефильтрованный запрос, что вкупе с большим возможным количеством нефильтрованных данных может ввести в ступор приложение...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка из формы в форму.. gJam Элементы интерфейса 5 21.07.2011 11:42
Оцените реализацию скрипта валидации данных формы pandasensey Ваши сайты и скрипты 0 05.07.2010 18:11
JavaScript отправка данных методом POST FORUS Серверные языки и технологии 15 29.05.2010 21:11
Проверка и отправка данных из формы Катерина Общие вопросы Javascript 2 25.03.2010 16:56
Автоматическое получение данных из формы Beck jQuery 6 06.11.2009 18:01