2011-07-27 61 views
3

这是我的情况:延期功能分辨率

我有一个“接口”,我的每个控件用于基本的东西,其中一件事是验证。

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

我需要一个通用的方法来让这个调用等待,直到它正在运行的验证结束。我认为这是使用延迟方法的理想场所,但我似乎无法做到。

这是我到目前为止有:

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

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

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

想法?

编辑: 我试图通过dfd到validatorFn和解决它存在,但在$.when永远不会触发。

回答

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'); 
}); 

DEMO

+0

这实际上是完美的。我没有想到的:)谢谢先生 –

+0

@Mike:欢迎:)我知道延期的对象可能会很难理解(至少这是我的情况)) –

+0

嗯,我以为我明白他们......然后这发生过 :) –