2

私は並べ替え可能な順序付きリストを使用しており、以下に基づいてデータベースを更新しています:

  1. 新しいアイテムをリストにドラッグすると、「受信」イベントが呼び出されてデータベースの挿入が行われます
  2. リストをソートすると、データベース内の表示順序が更新されます。

「更新」イベントと「受信」イベントはどちらもソート可能の一部であり、それぞれが ajax ポストを (非同期で) 実行するように設定されているため、これらのイベントの順序を制御することはできません。「更新」イベントの前に「受信」イベントを起動して完了する必要があります。

私の考えは、受信イベント内から更新イベントをアンバインドしてから、更新イベントを再バインドするか手動で呼び出すことでしたが、動作させることができません。

私は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
            });
        }
4

1 に答える 1

0

私はソート可能でこれと同じ問題を抱えていましたが、underscore.jsからデバウンスを使用することになりました

http://underscorejs.org/#debounce

複数のイベントが発生する可能性があるが、ハンドラーを 1 回だけ呼び出したい場合などに、タイマーでイベント ハンドラーをラップできます。ソート可能の場合、受信と更新の両方でカスタム イベントをトリガーします。次に、それをリッスンするデバウンス ハンドラーがあり、タイミングを合わせて、最後のイベントが受信されたときに 1 回だけ呼び出されるようにします。

于 2013-02-13T19:28:10.080 に答える