2013-10-03 66 views
5

我正在設置一種方法讓我保持自己喜歡的requireJS工作方式並將其與Wordpress集成。在Wordpress中使用requireJS

最大的問題是如何加載jQuery。 Wordpress通過wp_enqueue_script加載jQuery,這需要保持這種方式,因爲我經常使用的一些Wordpress插件需要通過這種方式添加jQuery。然後我不想在我的requireJS設置中加載第二個jQuery版本。因此,解決這個經過一番尋找是我想出:

模板/ footer.php

<script> 
if (typeof jQuery === 'function') { 
    define('jquery', function() { return jQuery; }); 
} 

require(['/assets/js/sample-common.js'], function (common) { 
    require(['sample-bootstrapper']); 
}); 
</script> 

如果jQuery的已經被添加到頁面上,如果已經它然後看到它將其設置爲模塊值。

我的問題是,我應該把它留的jQuery是在全局命名空間,或按照下列指示:

http://requirejs.org/docs/jquery.html#noconflictmap

上述問題是,我可能會需要包括AREN jQuery插件AMD是否兼容,是否值得努力使它們兼容AMD或者我想過的另一個解決方案是從noConflict聲明中刪除真正的聲明,該聲明使'jQuery'保持在允許插件運行的全局命名空間中。

這不是一個問題,更需要最佳實踐建議。任何將非常感謝!

謝謝!

+0

我認爲你還需要把'jquery'放在你的需求中,除了定義它否? – WraithKenny

回答

0

WordPress對jQuery進行排隊是因爲它是一個腳本,您應該對自己的腳本執行相同的操作,因爲這意味着WordPress可以正常處理您的依賴關係。另外請注意,WordPress的捆綁jQuery已經在noConflict()模式下加載,以防止插件衝突。

如果你指定jQuery作爲腳本的依賴關係之一,那麼WordPress會將它添加到任何添加依賴它的腳本的頁面 - 但只有當它尚未被加載時(它不會將其添加第二次)。

更新:根據@brasofilo評論get_stylesheet_directory()功能搜索子和父,如果沒有匹配存在的子。在父母和小孩的主題情況下都可以安全地使用get_stylesheet_directory()

從WP抄本取出並修改:http://codex.wordpress.org/Function_Reference/wp_enqueue_script

/** 
* Proper way to enqueue scripts and styles 
*/ 
function theme_name_scripts() { 
    wp_enqueue_script('script-name', get_template_directory_uri() . '/assets/js/sample-common.js', array('jquery'), '1.0.0', true); 
} 

add_action('wp_enqueue_scripts', 'theme_name_scripts'); 

這是這裏值得一提的是,如果你的腳本是在子主題目錄,那麼你應該換出get_template_directory_uri()get_stylesheet_directory_uri()更換。

+1

'get_stylesheet_'搜索孩子,如果不存在,則搜索父母,即可以在任何情況下安全地使用。 – brasofilo

+0

也許這應該在關於鏈接的codex頁面中的'$ src'參數的部分中註明...感謝您指出@brasofilo :) –

+1

感謝您的回答William。我明白,我應該堅持wp_enqueue_script所有我的腳本加載,但我更願意堅持requireJS,因爲這是我在Wordpress之外編寫代碼,以及在將它們集成到WP之前構建我的模板我不想重構我的代碼來適應。 – FlimFlam