Как я могу заставить фильтры заголовка SlickGrid появляться при загрузке сетки?
Я использую MVC C#/Razor, моя фильтрация работает полностью, ввод заголовка просто не появляется при загрузке страницы. Я использовал следующий фрагмент для настройки входов:
grid.onHeaderRowCellRendered.subscribe(function (e, args) {
$(args.node).empty();
$("<input type='text'>")
.data("columnId", args.column.id)
.val(columnFilters[args.column.id])
.appendTo(args.node);
});
Тем не менее, чтобы отобразить входные данные, мне нужно сначала изменить порядок столбцов. Я предполагаю, что функция столбца переупорядочения вызывает функцию onHeaderRowCellRendered, которая затем создает эти входные данные. У меня вопрос: почему функция onHeaderRowCellRendered не вызывается, когда сетка загружается в первую очередь, и как я могу запустить ее при создании сетки, или, альтернативно, как я могу просто заставить текстовые поля ввода появляться?
Больше кода ниже:
grid = new Slick.Grid("#versionGrid", filteredData, columns, options);
$(grid.getHeaderRow()).delegate(":input", "change keyup", function (e) {
var columnId = $(this).data("columnId");
if (columnId != null) {
columnFilters[columnId] = $.trim($(this).val());
var localData = JSON.parse(JSON.stringify(slickdata));
filteredData = filterData(columnFilters, localData);
grid.setData(filteredData);
$("#versionGrid").show();
}
});
grid.autosizeColumns();
$("#versionGrid").show();
grid.onHeaderRowCellRendered.subscribe(function (e, args) {
$(args.node).empty();
$("<input type='text'>")
.data("columnId", args.column.id)
.val(columnFilters[args.column.id])
.appendTo(args.node);
});
1 ответ
Чтобы достичь этого, я просто один раз вызываю код создания фильтров.
function appendFiltersCreators(e, sender){
...
}
$(function () {
slickgrid.onColumnsReordered.subscribe(appendFiltersCreators);
appendFiltersCreators(null, {"grid": slickgrid});
});
Я использую другое событие, но оно должно работать и в вашем случае.