Knockout.js KnockoutJS单击绑定返回承诺
使用KnockoutJS时,如果使用click处理程序调用的函数返回承诺,会导致任何问题吗?首先:您尝试过吗?这是很容易测试自己 直截了当地回答:这取决于你在想什么(多做些细化就好了) 如果您碰巧有一个执行某些逻辑的函数,并返回一个承诺(由于某些原因与您正在进行的单击绑定完全无关),那么您可以从单击处理程序调用它,甚至可以直接将其用作单击处理程序 但是,如果click处理程序背后的逻辑依赖于异步任务,并且需要等待它完成,则不能将该函数用作click处理程序,因为返回的承诺将被忽略。您仍然可以定义一个调用函数的单击处理程序,并对返回的承诺创建回调 任何更具体的问题都需要一个更详细的问题,最好是一个(伪)代码示例,说明您正在考虑的情况 例如:Knockout.js KnockoutJS单击绑定返回承诺,knockout.js,Knockout.js,使用KnockoutJS时,如果使用click处理程序调用的函数返回承诺,会导致任何问题吗?首先:您尝试过吗?这是很容易测试自己 直截了当地回答:这取决于你在想什么(多做些细化就好了) 如果您碰巧有一个执行某些逻辑的函数,并返回一个承诺(由于某些原因与您正在进行的单击绑定完全无关),那么您可以从单击处理程序调用它,甚至可以直接将其用作单击处理程序 但是,如果click处理程序背后的逻辑依赖于异步任务,并且需要等待它完成,则不能将该函数用作click处理程序,因为返回的承诺将被忽略。您仍然可以定义
function asyncLogic() {
var deferred = $.Deferred();
// Perform async logic, then resolve
setTimeout(function () {
deferred.resolve();
}, 100);
return deferred.promise();
}
function handleClick(event) {
// Disable the button, then perform the async logic, when its done re-enable the button
$(event.target).attr('disabled', 'disabled');
asyncLogic().then(function () {
$(event.target).removeAttr('disabled');
});
}
<form>
<input type="submit" data-bind="click: handleClick" />
</form>
函数异步逻辑(){
var deferred=$.deferred();
//执行异步逻辑,然后解析
setTimeout(函数(){
延迟。解决();
}, 100);
延迟返回。承诺();
}
函数handleClick(事件){
//禁用按钮,然后执行异步逻辑,完成后重新启用按钮
$(event.target).attr('disabled','disabled');
asyncLogic().then(函数(){
$(event.target).removeAttr('disabled');
});
}
我不明白你的问题,你能扩展一下吗?