我在点击事件中调用回调时遇到了一些麻烦。首先,我在每个tr上注册点击事件。
jQuery(tr).click(function (event) {
var that = this;
A(event, that, function () {
var $gantt_container = $('#gantt_container'),
gantt = ($gantt_container.data("GanttControl") ||
$gantt_container.data("radiantqGanttControl"));
gantt.UpdateDatasource();
return;
});
});
在对A的方法调用中,我将函数作为参数传递。
var A = function (event, that, B) {
var activity = event.currentTarget['data-grid-item'].Activity;
if (event.target.type !== 'checkbox') {
jQuery(':checkbox', that).trigger('click');
}
if (jQuery(':checkbox', that)[0].checked == false) {
jQuery(this).removeClass('ui-selected ui-state-active');
activity.DataSource['checkbox'] = '<input class="tandtCheckbox" entityType = "' + activity.DataSource.type + '" status="' + activity.DataSource.status + '" name="' + activity.DataSource.name + '" projectId="' + activity.DataSource.projectId + '" type="checkbox" id="' + activity.DataSource.taskId + '" mileStone="' + activity.DataSource.mileStone + '" >';
} else {
activity.DataSource['checkbox'] = '<input checked class="tandtCheckbox" entityType = "' + activity.DataSource.type + '" status="' + activity.DataSource.status + '" name="' + activity.DataSource.name + '" projectId="' + activity.DataSource.projectId + '" type="checkbox" id="' + activity.DataSource.taskId + '" mileStone="' + activity.DataSource.mileStone + '" >';
}
B();
return;
};
我想执行传递的函数来表现得像回调,其中方法A不应该等待函数B返回。
但是,这并不像我预期的那样。方法调用A正在等待B返回。
我是JavaScript / callback的新手需要有关如何将函数B调用作为回调的专家建议。
答案 0 :(得分:4)
你的术语有点偏,在其他逻辑完成后,假设运行回调 - 这就是这里发生的事情。你想要的是异步逻辑。
你可以分开你的逻辑:
A(event, that);
B();
function B() {
var $gantt_container = $('#gantt_container'),
gantt = ($gantt_container.data("GanttControl") ||
$gantt_container.data("radiantqGanttControl"));
gantt.UpdateDatasource();
return;
});
var A = function (event, that) {
// your code...
}
或者你可以使用setTimeout
强制进行并列论,尽管这有点“hacky”&#39;:
var A = function (event, that, B) {
// your code...
setTimeout(B, 0);
return;
};
答案 1 :(得分:1)
您可以使用简单的setTimeout()来执行此操作,如
setTimeout(B, 0);
当您调用B()
时,它是一个同步调用,执行控制将传递给B
,并且只有在执行A
后才会返回B
。当您使用setTimeout()
时,传递的B
的执行将传递给计时器,该计时器将在当前执行完成时占用。