JQuery Sortable - 在“receive”事件中禁用“update”事件?

时间:2012-05-23 07:28:11

标签: jquery jquery-ui

我正在使用可排序的有序列表并根据以下内容对数据库进行更新:

  1. 将新项目拖到列表中,调用“receive”事件来执行db insert
  2. 对列表进行排序,更新数据库中的显示顺序。
  3. 既然“update”和“receive”事件都是可排序的一部分,并且每个事件都设置为执行ajax post(异步),我无法控制这些事件的顺序。我需要在“更新”事件之前触发并完成“接收”事件。

    我的想法是。从接收事件中取消绑定更新事件,然后重新绑定或手动调用更新事件,但我无法使其工作。

    我是jquery的新手,所以非常感谢任何帮助!!!

    提前致谢, 乍得

        $("#myMovieListItems").sortable({
                receive: OnReceive,
                update: OnSortableUpdate,
                placeholder: 'ui-state-highlight',
                containment: 'document',
                revert: true
            });
    function OnReceive(event, ui) {
                //Disable the update event and manually call it on success of this event
                $("#myMovieListItems").unbind("update");
    
                //Set ID of new list element with it's original value
                var newItem = $(this).data().sortable.currentItem;
                newItem.attr('id', $(ui.sender).attr('id'));
    
                //Get Data to pass to AJAX method
                droppedID = newItem.attr('id');
                droppedName = $.trim(newItem.first().contents().filter(function () {
                    return this.nodeType == 3;
                }).text());
    
                messageContainer.html(progressMessage);
                source = "Facebook";
    
                $.ajax({
                    type: 'POST',
                    url: GetSiteRoot() + 'DesktopModules/Incite/MovieRotation/Handlers/Sortable.asmx/InsertMovie',
                    data: '{strMovieName: \'' + droppedName + '\', intMovieListID: \'' + movieListID + '\', strSource: \'' + source + '\', strSourceID: \'' + droppedID + '\'}',
                    contentType: 'application/json; charset=utf-8',
                    dataType: 'json',
                    success: OnAddMovieSuccess,
                    error: OnSortableUpdateError
                });
            }
    

1 个答案:

答案 0 :(得分:0)

我在sortable中遇到了同样的问题,最后使用了来自underscore.js的debounce

http://underscorejs.org/#debounce

它可以将事件处理程序包装在计时器中,例如,您可能有多个事件被触发,但只想调用一次处理程序。对于sortable,我会在接收和更新时触发自定义事件,然后有一个debounced处理程序监听它,并且有时间,确保它只在收到最后一个事件时被调用一次。