我有以下情况:
用户可以将控件拖放到页面上。'dropping' 客户端事件启动一个 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));
}
}