#javascript #jquery #jqgrid #mcustomscrollbar
#javascript #jquery #jqgrid #mcustomscrollbar
Вопрос:
Я пытаюсь добавить пользовательскую полосу прокрутки в свою jqgrid
таблицу с помощью метода loadComplete, например: $(".ui-jqgrid-bdiv").mCustomScrollbar();
Для меня это работает просто отлично, но в случае с замороженными столбцами я получаю эту ошибку: Cannot read property 'rows' of undefined
Может быть, кто-нибудь может помочь мне с этой проблемой? Спасибо
Вот мой код:
const colModel = [
{
name: "select",
width: 35,
frozen: true,
},
{
name: "name",
width: 80,
label: "NAME",
fixed: true,
frozen: true,
},
{
name: "date_saved",
width: 130,
label: "DATE SAVED"
},
{
name: "company",
width: 130,
label: "COMPANY"
},
];
export const refreshSavedContacts = () =>
$.getJSON('/endpoint')
.success(({ data }) => $("#jqGrid").jqGrid('clearGridData').jqGrid('setGridParam', { data }).trigger('reloadGrid'))
.error((error) => console.error("error: " error));
export const savedContacts = () => {
$("#jqGrid").jqGrid({
autoencode: false,
colModel,
sortIconsBeforeText: true,
viewsortcols: [true, "vertical", true],
autowidth: true,
shrinkToFit: false,
cmTemplate: { editable: true, autoResizable: true },
iconSet: "jQueryUI",
autoResizing: { compact: true },
inlineEditing: { keys: true, position: "afterSelected" },
sortname: "invdate",
sortorder: "desc",
height: 230,
multiselect: true,
multiselectPosition: "none",
loadComplete: () => $(".ui-jqgrid-bdiv").mCustomScrollbar(),
})
$("#jqGrid").jqGrid('setFrozenColumns');
}
Комментарии:
1. Какая версия jqGrid используется?
2. 4.15.5 на самом деле, эту проблему я только что решил, установив этот $(«.ui-jqgrid-bdiv»). mCustomScrollbar() с данными, а затем запустить перезагрузку сетки. Спасибо
3. но я получаю новую проблему — асинхронную прокрутку замороженных и не замороженных таблиц
Ответ №1:
Вы используете не поддерживаемую версию jqGrid — free-jqGrid, я предлагаю вам переключиться на поддерживаемую версию Guriddo jqGrid.
Использование пользовательской полосы прокрутки с замороженными столбцами требует перезаписи функции прокрутки сетки. Я не уверен, изменен ли исходный код прокрутки в free-jqGrid, но вы должны посмотреть на функцию scrollGrid.
На самом деле вы должны прокручивать замороженный div, когда прокручивается основной div. В Guriddo jqGrid это выглядит так (в функции scrollGrid).
if(p.frozenColumns) {
$(grid.fbDiv).scrollTop( grid.bDiv.scrollTop );
}
Кроме того, вы должны посмотреть на метод setFrozenColumns, чтобы изменить код при действии горизонтальной прокрутки.
Другими словами, это не тривиальная задача.