2011-09-08 17 views
3

我正在使用「兩步查看」,其中我有一個佈局模板(對於所有頁面都是公共的),使用jQuery和一些插件的yepnope的加載(在html頭部)。喜歡的東西:yepnope的完整回調問題

yepnope(['/path/to/jquery.js', '/path/to/jquery.plugin-common.js']); 

有時候,我需要另一個插件,所以內模板中我做額外的(在HTML正文):

yepnope('/path/to/jquery.plugin-additional.js'); 

現在我需要做的實際JS魔法,可以我做安全只是:

yepnope({ 
    complete: function(){...} 
}); 

所以,這些問題事實上是兩個:

  1. 在全局資源堆棧的加載完成時是否完成了回調?因此,假設所有需要的資源都已經被註冊過,那麼在任何地方「註冊」這個完整的回調函數是安全的。

  2. 我可以使用「完整」回調選項安全地調用yepnope嗎?我的意思是,只要我不是「測試」任何東西,我的資源已經被註冊已經...

我已經嘗試過了,它的工作,但我不完全知道,如果它的內部結構,所以我只是想確保我沒有做錯什麼......提前致謝。

-

還有最後一件事。 manual根據預加載!說:

yepnope({ 
    load: 'preload!jquery.1.5.0.js', 
    callback: function (url, result, key) { 
     window.jQuery; // undefined (but it's cached!); 
    } 
}); 

你能解釋一下這是怎麼回事?我完全錯過了這裏的意思......

回答

2

我可以幫助預加載!題。 預加載的想法! yepnope會下載文件,但不會執行它。 它傳輸jQuery文件,但在回調被調用後它仍然是未定義的,因爲它沒有作爲腳本注入頁面。

0

在我看來,你做錯了。我很驚訝它的工作,但也許你的腳本在「完成」函數的調用之前加載。我認爲你應該做的是:

yepnope({ 
    load: ['/path/to/jquery.js', '/path/to/jquery.plugin-common.js'] 
    callback: { 
     "jquery.js": function() { 
      console.log("jquery loaded!"); 
     }, 
     "jquery.plugin-common.js": function() { 
      console.log("plugin loaded!"); 
     } 
    } 
}); 

而在HTML正文的附加插件:

yepnope({ 
    load: '/path/to/jquery.plugin-additional.js' 
    callback: function() { 
     $(document).ready(function(){ 
      console.log("plugin-additional loaded!"); 
     }); 
    } 
}); 

當然,你的代碼涉及到,你可以在這個安全地執行每一個插件替換console.log()上下文。

對於最後一個問題,我不能說什麼,因爲我沒有成功預先加載!工作,也許它是越野車,也許我不明白它是如何工作的...