JQuery UI Sortable Отключить функцию обновления до получения - PullRequest
8 голосов
/ 07 апреля 2011

Я использую jquery ui для обработки списка, в котором вы можете сортировать, а затем также сортировать другой список.Я использую обновление для сортировки внутри, и это прекрасно работает.Когда я сортирую между, я просто хочу вызвать функцию получения, а не обновления.В настоящее время вызывается обновление, а затем вызывается метод получения.Есть ли способ пропустить вызов обновления при сортировке между списками?

<script>
            $ = jQuery
            $(function() {
                $( "#sortable1).sortable({
                    connectWith: ".connectedSortable",
                    placeholder: "ui-state-highlight",
                    update: function(event, ui) {processSortWithin(ui.item.attr("id"), ui.item.index()); },
                    receive: function(event, ui){ 
                        processSortBetween(ui.item.attr("id"), ui.item.index(),ui.sender.attr("id"));
                    }
                }).disableSelection();
            });

        </script>

Ответы [ 3 ]

13 голосов
/ 08 сентября 2011

Ответ от: http://forum.jquery.com/topic/sortables-update-callback-and-connectwith

update: function(e,ui) {
    if (this === ui.item.parent()[0]) {
        //your code here
    }
}
4 голосов
/ 12 января 2012

Попробуйте это:

update: function(e,ui) {
   if (!ui.sender) {
       //your code here
   }
}
4 голосов
/ 07 августа 2011

У меня была похожая проблема сегодня, и единственное решение, которое я нашел, состояло в том, чтобы ввести переменную флага, которая устанавливается во время события update и проверяется во время события stop .

В вашем примере вы используете событие receive , которое будет сгенерировано в списке, который получает новый элемент из какого-то другого списка, поэтому он должен быть установлен внутри $(".connectedSortable").sortable() параметров.

Вот мой способ различения, сортировать ли (в пределах одного списка, обработанного в stop ) или перемещать (между двумя списками, обработанными в receive ):

$(function() {
    position_updated = false; //helper flag for sortable below

    $(".sortable").sortable({
        connectWith: ".sortable",
        update: function(event, ui) {
            position_updated = !ui.sender; //if no sender, set sortWithin flag to true
        },
        stop: function(event, ui) {
            if (position_updated) {
                processSortWithin(ui.item.attr("id"), ui.item.index());
                position_updated = false;
            }
        },
        receive: function(event, ui) {
            processSortBetween(ui.item.attr("id"), ui.item.index(),ui.sender.attr("id"));
        }
    }).disableSelection();
});

function processSortWithin(id, position) {
    alert("sort within");
}

function processSortBetween(id, position, sender_id) {
    alert("sort between");
}

Рабочий пример: http://jsfiddle.net/myLff/2/

...