Бесплатная jqGrid 4.8.0 - восстановить значения фильтра панели инструментов сетки

Я пытаюсь восстановить сетку после выполнения GridUnload до ее предыдущего состояния с точки зрения фильтрации, сортировки, группировки и т. д.». Я успешно восстановил все это, но пропустил некоторые визуальные аспекты в сетке, которые не являются частью данных, которые я восстанавливаю, и поэтому я их не вижу.

Например, я восстанавливаю значения фильтра (toolbarfilter), но не вижу значения фильтров на панели инструментов. (они есть, так как я могу восстановить их с помощью $("#gview_"+$grid.attr('id')+' #' + inputId).val(column.data), но я не знаю, как сделать так, чтобы они снова появлялись, не перебирая их вручную.

Спасибо,

Тал.


person Tal    schedule 02.04.2015    source источник


Ответы (2)


Я думаю, что если вы уже заполнили все поля панели инструментов фильтра, то вы можете просто вызвать метод triggerToolbar. Будьте осторожны, чтобы метод был методом элемента DOM. Так что вы можете просто позвонить

$grid[0].triggerToolbar();
person Oleg    schedule 02.04.2015
comment
Спасибо. ТриггерToolbar запускает другой почтовый запрос на сервер? Если это так, я приведу к двум последовательным обращениям к серверу с одинаковыми данными. Все, что мне нужно, это показать значения на панели инструментов. - person Tal; 02.04.2015
comment
@Tal: это зависит от того, какие параметры поиска (или параметры filterToolbar вы используете). Лично я всегда использую stringResult: true опцию. В случае, если запрос к серверу содержит параметр filters в том же формате, что и в случае расширенного поиска (см. здесь), но только с одной группой причин. - person Oleg; 02.04.2015
comment
@Tal: triggerToolbar просто прочитайте значения с панели инструментов фильтра, добавьте параметры, такие как filters, к параметру postData, установите для параметра search значение true и триггер reloadGrid, чтобы сделать запрос на сервер или применить локальную фильтрацию. - person Oleg; 02.04.2015
comment
Я использую searchResult:true. Если панель триггера вызывает reloadGrid, значит, я снова иду на сервер. Я уже один раз зашел на сервер, пока восстанавливал сетку (во время ее инициализации), теперь хочу показать только значения фильтра. Если единственный способ добиться этого — снова перезагрузить сетку, то это своего рода потеря производительности. - person Tal; 02.04.2015
comment
@Tal: Извините, но я тогда не понимаю, что вы уже реализовали и что вам еще нужно. Вы написали, что я восстановил сетку (во время начального оного). Что ты имеешь в виду? Если вы получаете данные со стороны сервера, то сетка для меня — это просто комбинация параметров. Если бы я сохранил или восстановил сетку, я бы не сохранял/восстанавливал какие-либо данные, а только критерии сортировки, фильтр, текущий номер страницы, какие строки/строки выбраны и скоро. Данные я бы заполнил, отправив запрос на сервер. Это будет **текущее состояние данных на данный момент в базе данных сервера. - person Oleg; 02.04.2015
comment
Да, именно то, что я сделал. Я успешно восстановил все, что вы перечислили, и данные, которые я вижу после восстановления, применимы к тем параметрам, которые я восстановил. . Единственная проблема в том, что я не вижу значения на панели инструментов, хотя, например, если я сделаю сортировку, я увижу их снова (поскольку я полагаю, что это вызывает triggerToolbar). Во время создания сетки я передаю все данные, основанные на фильтрах, в параметр postData, поэтому сетка загружается с соответствующими данными. - person Tal; 02.04.2015
comment
@Tal: Извините, но я так и не понял: проблема решена или нет. Как я могу помочь? Какова ваша текущая проблема? - person Oleg; 02.04.2015
comment
Спасибо, Олег, я решил это, перебирая поля панели инструментов и нажимая значения. Я опубликовал это здесь. - person Tal; 02.04.2015
comment
@Tal: Добро пожаловать! Вы написали в своем вопросе: я успешно восстановил все это, я восстанавливаю значения фильтра. Я вас так понял, что вы уже можете заполнить панель инструментов, но вам нужно применить восстановленный фильтр. Кажется, есть недоразумения. - person Oleg; 02.04.2015
comment
Правильно, в сетке все значения в порядке, просто пользователь их не видит. Мне пришлось сделать следующее, чтобы значение появилось на панели инструментов. - person Tal; 02.04.2015
comment
@Tal: Непонятна именно часть вашего текста. Если все заполнено правильно, то не может быть, что 'пользователь их не видит'. Единственная интерпретация, которую я нашел, была следующей: значения находились на панели инструментов фильтра, пользователь мог видеть значения на панели инструментов фильтра, но пользователь не мог видеть соответствующие результаты в сетке. Можно выполнить $grid[0].triggerToolbar();, чтобы обновить тело сетки на основе фильтра. Я до сих пор не понимаю, что вы имеете в виду под всплывающим значением на панели инструментов. Более того, вы пишете комментарии, но не задаете вопросов. Вы уже решили проблему самостоятельно? - person Oleg; 02.04.2015
comment
Спасибо Олег. Я не принимаю postData КАК ЕСТЬ, потому что мой сервер принимает только один тип фильтров (и мне отчаянно нужны как панель инструментов, так и расширенный). Вместо этого я создаю его сам, вызываю свой сервер и после завершения загрузки возвращаю значение фильтров обратно в postData. Итак, в gridComplete я восстанавливаю postData в состояние, известное jqGrid, вызывая grid.jqGrid('setGridParam',{postData: postData }); Основываясь на вашей последней заметке, я предполагаю, что этот поток вызывает некорректное поведение фильтра панели инструментов. - person Tal; 03.04.2015

В конце концов, я восстановил фильтр панели инструментов, выполнив следующие действия:

  1. Я сохранил все правила во временную переменную (barFilter).
  2. После восстановления сетки я добавил новую функцию, которая получает barFilter и извлекает значения на свои места restoreToolbarFilter($('#'+gridName),barFilter);:

regexEscape = function(s) {
			return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
};

function restoreToolbarFilter($grid,searchParams){
	
				
				for (key in searchParams) {
					// Restore the search input string
					var column = searchParams[key];
					
					inputId = regexEscape('gs_' + column.field);
				
					
					$("#gview_"+$grid.attr('id')+' #' + inputId).val(column.data);
					
					// Restore the search filter type and operator symbol
					operator = $("#gview_"+$grid.attr('id')+' #' + inputId).closest('tr').find('.soptclass');
					$(operator).attr('soper', column.op);
					operands = {  "eq":"==",
									"ne":"!",
									"lt":"<",
									"le":"<=",
									"gt":">",
									"ge":">=",
									"bw":"^",
									"bn":"!^",
									"in":"=",
									"ni":"!=",
									"ew":"|",
									"en":"!@",
									"cn":"~",
									"nc":"!~",
									"nu":"#",
									"nn":"!#" };
					$(operator).text(operands[column.op]);
				}
}

person Tal    schedule 02.04.2015