2013-10-03 51 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