У меня есть следующий сценарий:
Пользователь имеет возможность перетаскивать элемент управления на страницу.«Сбрасываемое» клиентское событие инициирует 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 обрабатывается, пользователь все еще имеет полный контроль над своей мышью.Для них было бы весьма необычным сценарием захотеть перетащить другой элемент управления на страницу, пока это событие все еще обрабатывается.
В настоящее время, если они делают именно это, первое событие отменяется, а затемвторое событие проходит успешно.Мне было интересно, как я мог поставить эти события в очередь?
Я попытался просто обернуть вышеупомянутый код в "$ .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));
}
}