3

これが私の状況です:

私のコントロールのそれぞれが基本的なものに使用する「インターフェース」があります。それらの1つは検証です。

その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 に答える