Проблема с JQueryUI Sortable: сериализация отчетов о неправильном порядке - PullRequest
0 голосов
/ 14 мая 2011

Я использую sortable для реализации одномерного списка виджетов. Это работает нормально, но когда я звоню serialize, чтобы отправить текущий заказ обратно на сервер, генерируется неправильный заказ.

Вот мой HTML, обратите внимание на порядок идентификаторов виджетов: 13, 10, 11:

<div id="widget_columns">
    <ul id="column1" class="widget-column grid_8 alpha ui-sortable">
        <li id="widget_13" class="widget">
        (a widget!)
        </li>

        <li id="widget_10" class="widget">
        (a widget!)
        </li>

        <li id="widget_11" class="widget">
        (a widget!)
        </li>
    </ul>
</div>

Список инициализируется с

    $(#widget_columns').sortable({
        connectWith: $(#widget_columns'),
        handle: settings.handleSelector,
        placeholder: 'widget-placeholder',
        forcePlaceholderSize: true,
        revert: 300,
        delay: 100,
        opacity: 0.8,
        containment: 'document',
        start: function (e, ui) {
            $(ui.helper).addClass('dragging');
        },
        stop: function (e, ui) {
            $(ui.item).css({ width: '' }).removeClass('dragging');
            $(settings.columns).sortable('enable');
        }
    });

Однако, когда я тогда звоню

alert($('#widget_columns *').sortable('serialize'));

чтобы узнать порядок виджетов, я получаю правильные идентификаторы, но в неправильном порядке, 10, 11, 13:

widget[]=10&widget[]=11&widget[]=13

Есть идеи, почему это может быть?

Ответы [ 2 ]

2 голосов
/ 14 мая 2011

Вы применяете метод sortable к родительскому div, а не ul Я не уверен, почему, также при вызове serialize вы не вызываете его для предыдущего сортируемого объекта !

Вот небольшой рабочий пример :

$('#column1').sortable({
    //connectWith: $('#widget_columns'),
    revert: 300,
    delay: 100,
    opacity: 0.8,
    containment: 'document',
    start: function(e, ui) {
        //$(ui.helper).addClass('dragging');
    },
    stop: function(e, ui) {
        //$(ui.item).css({ width: '' }).removeClass('dragging');
        //$(settings.columns).sortable('enable');
        alert($(this).sortable('serialize'))
    }
});
0 голосов
/ 25 мая 2011

Чтобы ответить на мой собственный вопрос, это как-то связано с тем фактом, что мое решение disable является сортируемым, когда перетаскивание заканчивается, и enable s, когда перетаскивание начинается, - концепция, которую я бездумно взял из некоторого учебника. Когда я удалил код, отключив и снова включив сортировку ($(settings.columns).sortable('disable');), сериализация работала нормально.

...