0

次のシナリオがあります。

ユーザーは、コントロールをページにドラッグアンドドロップすることができます。「ドロップする」クライアント側イベントは、次のようにajaxRequestを開始します。

function OnClientDropping(sender, eventArgs) {
    var sourceItem = eventArgs.get_sourceItem();
    var droppedID = eventArgs.get_htmlElement().id;

    if (droppedID.indexOf("RadDockZone") != -1) {
        if ($find(droppedID).get_docks().length == 0) {
            var eventData = {};
            eventData["sourceItemText"] = sourceItem.get_text();
            eventData["sourceItemValue"] = sourceItem.get_value();
            eventData["listBoxID"] = sender.get_id();

            $find(ajaxManagerID).ajaxRequestWithTarget(droppedID, $.toJSON(eventData));
    }
}

これで、このajaxRequestの処理中、ユーザーはマウスを完全に制御できます。このイベントがまだ処理されている間に、別のコントロールをページにドラッグアンドドロップしたいというのは珍しいシナリオではありません。

現在、それを実行すると、最初のイベントがキャンセルされ、2番目のイベントが正常に実行されます。これらのイベントをどのようにキューに入れることができるのでしょうか。

上記のコードを「$.queue($ find(ajaxManagerID).....)」でラップしようとしましたが、プロジェクトの実行方法に変更はありませんでした。

このシナリオをサポートする適切な方法は何ですか?

if (queue.length == 0) {
    queue.push(uniqueDockZoneID);
    queue.push(eventData);
    $find(ajaxManagerID).ajaxRequestWithTarget(uniqueDockZoneID, $.toJSON(eventData));
}
else {
    queue.push(uniqueDockZoneID);
    queue.push(eventData);
}

function endRequest(sender, eventArgs) {

    if (queue.length > 0) {
        queue.shift(); //Remove the ID of the control we just finished.
        queue.shift(); //Remove the data for the control we just finished.
    }

    //If we've got more ajax requests queued up.
    while (queue.length > 0) {
        uniqueDockZoneID = queue.shift();
        data = queue.shift();
        $find(ajaxManagerID).ajaxRequestWithTarget(uniqueDockZoneID, $.toJSON(data));
    }
}
4

1 に答える 1

1

uniqueIdとdockZoneIDを配列に追加し、関連するajaxリクエストが完了したら、配列から各アイテムを削除してみませんか?

于 2011-07-15T21:35:52.707 に答える