Как я могу заставить фильтры заголовка 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});
});

Я использую другое событие, но оно должно работать и в вашем случае.

Другие вопросы по тегам