2012-11-16 25 views
9

我在我的網頁上加載了三個腳本,並且我想在它們中的兩個完成加載後觸發一個函數。是否有可能使Head JS的ready()函數等待兩個腳本?

head.js(
    { webfont: 'http://ajax.googleapis.com/ajax/libs/webfont/1.0.31/webfont.js' }, 
    { jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js' }, 
    { analytics: 'http://www.google-analytics.com/ga.js' } 
); 

理想我想能做到以下幾點,但它似乎並不可能使head.ready()等兩個腳本加載,根據documentation(請參閱腳本組織)。

head.ready('jquery', function() { 
    // Code that requires jQuery. 
}); 

// This is not supported. :-(
head.ready('jquery', 'analytics', function() { 
    // Code that requires both jQuery and Google Analytics. 
    // ... 
}); 

那麼我該如何解決這個問題呢?如果我嵌套就緒方法,我可以確定我的代碼將被觸發,還是隻有當jquery在分析之前完成加載纔會觸發它?

head.ready('jquery', function() { 
    // Code that requires jQuery. 
    // ... 
    head.ready('analytics', function() { 
     // Code that requires both jQuery and Google Analytics. 
     // ... 
    }); 
}); 

另一種解決方案可能是將加載語句分成兩部分,就像這樣。但是,我仍然可以從腳本的異步加載中完全獲益,還是會在jquery和分析之前完成加載webfont?

head.js(
    { webfont: 'http://ajax.googleapis.com/ajax/libs/webfont/1.0.31/webfont.js' } 
); 

head.js(
    { jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js' }, 
    { analytics: 'http://www.google-analytics.com/ga.js' }, 
    function() { 
     // Code that requires both jQuery and Google Analytics. 
     // ... 
    } 
); 

head.ready('jquery', function() { 
    // Code that requires jQuery. 
    // ... 
}); 
+0

我不知道HeadJS劇本,但我期望這樣的技術能夠很好地處理嵌套調用。同樣在Java中'Process.join()'在多個進程中被簡單地稱爲一個接一個,因爲即使進程完成的順序不同於join()調用的順序,以前完成的進程也會只是簡單地使'join'立即返回。我期望一個'ready()'調用一個已經加載的庫來簡單地立即調用回調函數(或者在下一個tick中)。 –

+1

他們的文檔和主頁顯示了多個等待多個腳本加載的明確示例。你在看什麼? –

回答

10

因爲腳本是爲了(即使裝在並行)執行的,你可以等待,這是「最後一在線」

head.js(
    { webfont : 'http://ajax.googleapis.com/ajax/libs/webfont/1.0.31/webfont.js' }, 
    { jquery : 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js' }, 
    { analytics: 'http://www.google-analytics.com/ga.js' } 
); 

head.ready('analytics', function() { 
    // when this triggers, webfont & jquery will have finished loading too 
}); 
+0

您發現了非常正確的單詞:「它們並行加載,但按順序執行」。爲你+1。 – iMatoria

相關問題