我有以下情况:
用户可以将控件拖放到页面上。 'drop'客户端事件初始化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));
}
}
答案 0 :(得分:1)
为什么不直接将uniqueId和dockZoneID添加到数组中,然后在关联的ajax请求完成后从数组中删除每个项目?