2013-10-03 21 views
5

içinde bana çalışma benim tercih requireJS şekilde tutmak ve Wordpress ile bu entegre etmek için bir yol kuruyorum.kullanma requireJS Wordpress

büyük sorun jquery nasıl yüklendiği sonra olmak. WordPress jQuery'yi wp_enqueue_script yoluyla yükler. Bu şekilde düzenli olarak kullandığım bazı WordPress eklentileri bu şekilde eklenerek jquery'ye ihtiyaç duyar. Daha sonra jQuery'nin ikinci bir sürümünü, requireJS kurulumumda yüklemek istemiyorum. Yani, bazı bu etrafa sonra ile geldim budur:

şablonları/footer.php o zaman olmuşsa jQuery zaten sayfaya eklenmiş eğer görür

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

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

o onu modül değeri olarak ayarlar.

Sorum ben o zaman sadece bu talimatları genel ad alanında olmak jquery bırakmak veya takip etmelidir geçerli:

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

yukarıdaki sorun muhtemelen değiller jquery eklentileri dahil etmek gerekir ise AMD uyumlu, bunları AMD uyumlu hale getirmek için harcanan değer ya da düşündüğüm başka bir çözüm, eklentilerin çalışmasına izin veren 'jQuery'yi' global isim alanında tutan noConflict bildirgesinden kaldırmaktır.

Bu sorunun daha az ve en iyi uygulama tavsiyesi için bir çağrının fazlasıdır. Ve her şey çok takdir edilecektir!

Teşekkürler! Bir komut çünkü

+0

Hala gerektiren senin hiçbir tanımlamadan ek olarak, içinde 'jquery' koymak gerektiğini düşünüyorum? – WraithKenny

cevap

0

WordPress jQuery enqueues, bunu WordPress incelikle sizin için bağımlılıkları işleyebilir demektir çünkü komut dosyalarını kendi için aynı yapmalıdır. Ayrıca, WordPress'in jQuery'sinin eklenti çakışmalarını önlemek için noConflict() modunda zaten yüklü olduğuna dikkat edin.

Eğer jQuery'yi betiğin bağımlılıklarından biri olarak belirtirseniz, WordPress onu buna bağlı betiğe ekleyen herhangi bir sayfaya ekleyecektir - ancak, yalnızca önceden yüklenmemişse (ekleyemezse) ikinci kez).

GÜNCELLEME: hiçbir şey eşleştirme çocukta varsa get_stylesheet_directory() fonksiyon aramalar çocuk ve daha sonra ebeveyn açıklama @brasofilo gereğince. Ebeveyn ve çocuk tema durumlarında get_stylesheet_directory() güvenliğini kullanın.

WP kodeksine Alındığı ve modifiye: 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'); 

Bu sizin komut çocuk teması dizinde ise o zaman get_template_directory_uri() aktarır ve get_stylesheet_directory_uri() ile değiştirmek gerektiğini burada belirtmek gerekir.

+1

'get_stylesheet_' çocuk için arama yapar ve mevcut değilse, ebeveyne yönelik aramalar, yani her koşulda güvenle kullanılabilir. – brasofilo

+0

Belki de bu ben bağlanmış ben kod sayfamıza $ src 'paramiter hakkında bölümünde dikkat edilmelidir ... bunu işaret ettiğin için teşekkürler @brasofilo :) –

+1

Cevabınız için teşekkürler William. Tüm betik yüklemelerim için muhtemelen wp_enqueue_script dosyasına yapışmam gerektiğini, ancak requireJS'ye sadık kalmayı tercih ederim çünkü Wordpress'in dışına kod yazıyor ve WP'ye entegre etmeden önce şablonlarımı yapıyorum. uyması gereken kod. – FlimFlam