2011-03-17 104 views
13

我想加載一個使用requirejs的插件,但偶爾會得到一個錯誤,「$ .fn是未定義的」,但如果我重新加載頁面錯誤消失幾乎就像現在jquery被緩存問題被刪除。我正在加載我的庫,如下所示:Requirejs加載插件

require(["jquery-1.4", "/script/jquery.autoSuggest.packed.js"], function($) { 
    $(function() { 
     //code 
    }); 
}); 

你能看到這個實現是否有任何錯誤會導致這個錯誤?需要JS被添加到頁面像這樣:

<script type="text/javascript" src="http://website.co.uk/frameworks/requirejs/0.2.4/sharedmodules/require.js"> 
</script> 
<script type="text/javascript"> requireMap = { 
    "jquery-1.4":"http://website.co.uk/sharedmodules/jquery-1.4" 
}; 

    require({ baseUrl: 'http://website.co.uk/', paths: requireMap });  
</script> 

這個,因爲它是我使用的框架的一部分,不能改變。

有什麼建議嗎?

謝謝!

回答

12

訂單插件被刪除。使用墊片裝載如下

requirejs.config({ 
    paths: { 
     'jquery': 'https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min', 
     'bootstrap': '../bootstrap/js/bootstrap.min', 
     'select2': 'vendor/select2', 
     'jshashtable': 'vendor/jshashtable-2.1', 
     'jquery.numberformatter': 'vendor/jquery.numberformatter-1.2.3.min', 
     'jq-datepicker': 'vendor/bootstrap-datepicker', 
     'jq-datepicker.da': 'vendor/bootstrap-datepicker.da' 
    }, 

    // Use shim for plugins that does not support AMD 
    shim: { 
     'bootstrap': ['jquery'], 
     'select2': ['jquery'], 
     'jq-datepicker': ['jquery'], 
     'jshashtable': ['jquery'], 
     'jquery.numberformatter': ['jquery', 'jshashtable'] 
    }, 

}); 

參考:http://requirejs.org/docs/api.html#config-shim

8

你會想要使用order plugin。默認情況下,RequireJS會盡可能快地加載腳本,並且它們可能無序加載。但是,訂單插件將保持腳本加載的順序。

如果您使用優化器來優化您的腳本,請確保在優化的腳本中同時包含jQuery和插件。

+0

微米。這仍然適用於jQuery 1.7嗎? – Stann 2011-11-10 03:01:27

+2

@Stann是的,仍然適用於jQuery 1.7。雖然jQuery 1.7註冊爲AMD模塊,但jQuery插件可能不會將其代碼封裝在define()包裝器中,要求將「jquery」作爲依賴項。所以這個問題實際上與jQuery插件有關 - 如果在jQuery加載之前加載,則會出現問題,除非插件將自身封裝在AMD define()調用中。 – jrburke 2011-11-14 19:43:16

+8

對於那些發現這種情況的用戶,訂購插件並未提供給RequireJS 2.0,因此上面的@ jrburke鏈接將無濟於事。您仍然可以使用[1.0 API與訂單插件](http://requirejs.org/docs/1.0/docs/api.html#order),但更好的解決方案是使用[2.0與填充程序配置]( http://requirejs.org/docs/api.html#config-shim)。 – 2012-06-16 16:27:10

3

您可能希望籤https://github.com/jquery-boilerplate/patterns

它有一些很好的樣板jQuery插件代碼,將與RequireJS工作。

我認爲你可能需要在你的jQuery版本之前將你的jQuery升級到1.7版本。

+0

你提供的鏈接似乎被破壞了,但是這個鏈接就OK了https://github.com/addyosmani/jquery-plugin-patterns/ – Krystian 2012-11-14 08:56:14

+0

謝謝,更新了鏈接。 – troynt 2012-11-14 16:36:40