KnockoutJS点击绑定返回一个promise

时间:2014-04-24 07:46:23

标签: knockout.js

当使用KnockoutJS时,如果使用单击处理程序调用的函数返回了一个promise会导致任何问题吗?

1 个答案:

答案 0 :(得分:3)

首先:你试过吗?很容易自己测试一下。

直接回答:这取决于你的想法(一些更精细的说法会很好)。

如果您碰巧有一个执行某些逻辑的函数,并返回一个承诺(由于某种原因与您正在制作的点击绑定完全无关),您可以从您的点击处理程序调用它,您甚至可以将其用作直接点击处理程序。

但是,如果click处理程序背后的逻辑依赖于异步任务并需要等待它完成,则不能将所述函数用作单击处理程序,因为返回的promise将被忽略。您仍然可以定义一个调用该函数的单击处理程序,并在返回的promise上创建一个回调。

任何更具体的问题都需要一个更复杂的问题,理想情况是你正在考虑的情况的(伪)代码示例。

一个例子:

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>