データを特定の順序でロードする必要があるアプリケーションがあります。ルートURL、次にスキーマ、最後にさまざまなデータオブジェクトのスキーマとURLを使用してアプリケーションを初期化します。ユーザーがアプリケーションをナビゲートすると、データオブジェクトがロードされ、スキーマに対して検証され、表示されます。ユーザーがデータをCRUDすると、スキーマは初回パスの検証を提供します。
初期化に問題があります。Ajax呼び出しを使用してルートオブジェクト$ .when()をフェッチし、スキーマオブジェクトごとに1つずつ、promiseの配列を作成します。うまくいきます。コンソールにフェッチが表示されます。
次に、すべてのスキーマのフェッチが表示されるので、各$ .ajax()呼び出しが機能します。fetchschemas()は確かにpromiseの配列を返します。
ただし、その最後のwhen()句は起動せず、「DONE」という単語はコンソールに表示されません。jquery-1.5のソースコードは、$。when.apply()に渡すオブジェクトとして「null」が受け入れられることを示唆しているようです。渡された。
これはFutures.jsを使用して機能しました。このようにならない場合、jQuery Deferredの配列はどのように管理する必要がありますか?
var fetch_schemas, fetch_root;
fetch_schemas = function(schema_urls) {
var fetch_one = function(url) {
return $.ajax({
url: url,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json"
});
};
return $.map(schema_urls, fetch_one);
};
fetch_root = function() {
return $.ajax({
url: BASE_URL,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json"
});
};
$.when(fetch_root()).then(function(data) {
var promises = fetch_schemas(data.schema_urls);
$.when.apply(null, promises).then(function(schemas) {
console.log("DONE", this, schemas);
});
});