2011-07-27 59 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

嗯,我以爲我明白他們......然後這發生過 :) –