Моя проблема: Когда я перетаскиваю строку в jqGrid и он завершает пользовательскую функцию перезагрузки, ячейки сетки, ранее имевшие разную ширину, установленную при определении сетки, меняют размер на одинаковую ширину. Это происходит в браузерах Webkit, но не в Firefox.
Код:. У меня включено перетаскивание для сортировки в сетке:
$mygrid.jqGrid(
'sortableRows', {
update: function(e, ui) {
sort_grid(e, ui);
}
}
);
Как вы можете видеть, у меня есть функция сортировки, вызываемая при завершении перетаскивания, sort_grid
. Вот она:
function sort_grid(e, ui) {
var current_grid = $(ui.item[0]).closest('table').attr('id');
var $current_row, moved_id, next_id, next_priority;
var $moved_row = $('#' + current_grid + ' tr');
var cnt = 0;
this_id = ui.item[0].id;
$moved_row.each(function () {
if ($(this).attr('id') == this_id) {
$current_row = $moved_row.eq(cnt);
moved_id = $current_row.attr("id");
next_id = $current_row.next().attr("id");
next_priority = $current_row.next().children("td:first").attr("title");
}
cnt++;
});
if ( typeof moved_id !== 'undefined' ) {
if ( next_priority == 'undefined' ) {
next_priority = '999';
}
$.ajax({
url:my_url,
type:"POST",
data:"moved_id=" + moved_id + "&next_id=" + next_id + "&next_priority=" + next_priority,
success: function(data) {
$('.grid').setGridParam({loadonce:false, datatype:'json'}); // force grid refresh from server
$('#' + current_grid).trigger("reloadGrid");
$('.grid').setGridParam({loadonce:true}); // reset to use local values
}
})
}
}
Как только я нажимаю триггер перезагрузки $('#' + current_grid).trigger("reloadGrid");
и перезагрузка завершается, сетка теперь имеет неправильную ширину ячеек в сетке (они переходят от разной ширины к одинаковой).
Когда сетка была первоначально создана, ее ширина была определена обычным способом jqGrid:
colModel:[
{name:'one', index:'one', sortable:true, width:45},
{name:'two', index:'two', sortable:true, width:180},
]
но после перезагрузки сетки ширина всех ячеек становится одинаковой (я предполагаю, что это общая ширина сетки, равномерно разделенная на общее количество ячеек в ряду). Итак, нужно ли мне явно установить эти ширины снова, возможно, с помощью чего-то вроде следующего, вызываемого после перезагрузки сетки?
$('.grid').setGridParam({
colModel:[
{name:'one', index:'one', sortable:true, width:45},
{name:'two', index:'two', sortable:true, width:180},
]
});
Я попробовал вышеописанное исправление, переопределяя colModels после перезагрузки и явно устанавливая ширины, но это не дало никакого эффекта. Более того, если я зайду в консоль браузера и установлю ширину с помощью javascript, это также не даст никакого эффекта. Это ставит меня в тупик.
К сожалению для меня, похоже, что jqGrid "Answer Man" (Oleg) не рядом... lol.