3

这是我的情况:

我有一个“界面”,我的每个控件都用于基本的事情,其中​​之一就是验证。

因此,我有一个processValidation函数贯穿该特定控件的每个传入函数。这些功能可能与isNumeric()需要 Web 服务调用一样简单或更复杂。这些函数返回一个简单的boolean说明这是否通过了验证。

我需要一种通用的方法来让这个调用等到它正在运行的验证完成。我认为这是使用 Deferred 方法的理想场所,但我似乎无法做到正确。

这是我到目前为止所拥有的:

var dfd = $.Deferred(function (dfd) {
            validator.validatorFn(value, $controlContainer);
        }).promise();

        $.when(dfd).done(function (result) {
            console.log('got here');
        });

当我进入被调用的函数时,我需要一种解决 dfd 的方法。我想这是我真正的问题。

想法?

编辑: 我尝试传递dfd给 validatorFn 并在那里解决它,但从$.when不触发。

4

1 回答 1

3

我不太确定你的流程,但为什么不让validator.validatorFn返回延迟对象呢?就像是:

validator.validatorFn = function(value, controlContainer) {
     var df = $.Deferred();
     // do validation
     // somewhere you call
     df.resolve(result);
     // or maybe df.reject(result);
     return df;
};

然后:

$.when(validator.validatorFn(value, controlContainer)).done(function (result) {
    console.log('got here');
});

演示

于 2011-07-27T18:20:11.107 回答