2012-04-27 5 views
6

私はjQueryの遅延オブジェクトを読んでいます。誰も2つの呼び出し方法の違いは何ですか?例

  1. $.when.apply(null, a method).done(function(){success callback})
  2. $.when.(a method).done(function(){success callback})

そして、何種類以上の第一の方法に適していますか?

ありがとうございます。 方法が実際に配列または配列を返すメソッドの呼び出しある場合

答えて

16

$.when.apply(null, a method)にのみ意味があります。それは$.when(elements, of, the, array)のようです。 applyメソッドの詳細については、See MDNを参照してください。

$.when.(a method)はまったく意味がありませんが、私は$.when(a method)を意味すると思います。この場合、のメソッドは、のメソッドを返す必要があります。これは、遅延オブジェクトまたは遅延オブジェクトを指す変数を返します。

$.when()の構文は$.when(one, or, more, deferreds)である - ので、あなたがアレイに含まれる複数のDeferredを渡したい場合は、文字列としてメソッド呼び出しを構築し、実際にである(evalを使用したくないので、あなたが.apply()を必要としますこの場合、悪い)。

+0

参照[MDN: 'fun.apply()'](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/適用)&[Eloquent JavaScript](http://eloquentjavascript.net/chapter6.html#key5) – gnarf

+0

+1の$ .when.apply(null、メソッド) – marverix

1

一部のリモート呼び出し(ajax)の応答後にコードを実行するためにDeferredが作成されました。

あなたが持っている可能性がありそう:

load_conf = function (user_id) { 
    var def = $.Deferred() 
    $("http://get_conf_data_url?user_id="+user_id).done(function (data) { 
     var processed_conf = do_something_with(data); 
     def.resolve(processed_conf); 
    }) 
    return def.promise(); 
} 

をので、あなたが行くことができる:

load_conf(1).done(function (processed_data) { 
    do_something_with(processed_data); 
}); 

exacly 3コンフィギュレーションをロードした後、いくつかのコードを実行することについては何? Nは可変であるNコンフィギュレーションをロードした後、いくつかのコードを実行について

$.when(load_conf(1), load_conf(2), load_conf(3)).done(function (c1, c2 ,c3) { 
    console.log("configurations: ", c1, c2, c3); 
}) 

しかし、どのような: あなたのような何かをするだろうか? この場合、Function.prptotype.applyメソッドを使用できます。 関数内で "this"として扱われるオブジェクトを第1引数として渡すことができます。 2番目の引数はパラメータのリストですが、配列内にあります。

ので、あなたはこのように行くことができます:

var defs = []; 
for (var i=1; i<=N; i++) { 
    defs.push(load_conf(i)); 
} 
// here's the magic 
$.when($,defs).done(function() { 
    console.log("All conf loaded: ", arguments); 
    // arguments contains N processed answers 
}); 
関連する問題