jqGrid - Перетаскивание строки для сортировки изменяет ширину ячеек

Моя проблема: Когда я перетаскиваю строку в 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.

5
задан Community 23 May 2017 в 12:03
поделиться