jquery сортируется, как предотвратить перемещение списка в другие связанные списки - PullRequest
1 голос
/ 14 февраля 2012

У меня есть три списка, все они связаны с сортировкой jquery-ui, первый список работает с отставанием, второй находится в процессе и последний завершен.

я хочу переместить элемент из первого списка вво-вторых и со второго на третье, если элемент перемещен из первого списка в третий список, список не принимает элемент.

теперь все сделано, но я не знаю, как предотвратить перемещение элементов в другом связанном списке дляпример если есть классы "a" (или ...)?

$(function(){
$(".tasks").sortable({
    connectWith : ".tasks",
    handle : "h2",
    items : ".task",
    opaciry : 0.6,
    revert : true,
    placeholder : "ui-state-highlight",
    forcePlaceholderSize : true,
    remove : function(e,obj){
        $(".tasks").each(function(){
            if($(this).children(".task").length == 0){
                $(this).addClass("empty");
            } else if($(this).hasClass("empty")) {
                $(this).removeClass("empty");
            }
        });
    },
    out : function(e,obj){
        $(".col").removeClass("red green");
        $(".tasks").sortable("enable");
    }
});
$("#p .tasks").sortable({
    receive : function(e,obj){
        obj.item.removeClass("tb").addClass("td");
    },
    over : function(e,obj){
        if(obj.item.hasClass("tb")) {
            $("#p").addClass("green");
        } else {
            $("#p").addClass("red");
            $("#p .tasks").sortable("disable");
            return false;
        }
    }
});

});

1 Ответ

4 голосов
/ 14 февраля 2012

Один из способов сделать это - использовать обратный вызов 'receive' в сочетании с методом 'cancel' для проверки любых перемещений. jsFiddle

$(".tasks").sortable({
    connectWith: ".tasks",
    receive: function (event, ui) {
        var validMove = function (a, b) {
                var changeMatrix = [
                    [true, true, false],
                    [true, true, true],
                    [false, true, true]
                ];
                return changeMatrix[a][b];
            },
            $lists, endList, startIndex, endIndex;
        $lists = $(".tasks");
        endList = $(ui.item).closest('.ui-sortable').get(0);

        startIndex = $lists.index(ui.sender);
        endIndex = $lists.index(endList);

        if (!validMove(startIndex, endIndex)) {
            $(ui.sender).sortable('cancel');
        }
    }
}).disableSelection();

Здесь я сделал матрицу допустимых ходов и функцию, которая проверяет на основе индекса списков источника и назначения.Список источников легко получить благодаря объекту ui, предоставленному в качестве параметра .sortable(), список назначения требует некоторого быстрого обхода.

...