2013-01-11 44 views
1

我試圖找出爲什麼這個工程:

<script src="js/head.js"></script> 
<script>head.js(<import-several-libraries-here>);</script> 

<script src="code.jquery.com/jquery-1.8.3.js"></script> 
<script src="code.jquery.com/ui/1.9.2/jquery-ui.js"></script> 

<script> 
    var j183 = $.noConflict(true); 
</script> 

但這些並不:

<script src="js/head.js"></script> 

<script> 
    head.js(<import-several-libraries-here>); 
    head.js("http://code.jquery.com/jquery-1.8.3.js"); 
    head.js("http://code.jquery.com/ui/1.9.2/jquery-ui.js"); 

    var j183 = $.noConflict(true); 
</script> 

AND

<script src="js/head.js"></script> 

<script> 
    head.js(<import-several-libraries-here>); 
    head.js("http://code.jquery.com/jquery-1.8.3.js"); 
    head.js("http://code.jquery.com/ui/1.9.2/jquery-ui.js"); 
</script> 

<script> 
    var j183 = $.noConflict(true); 
</script> 

我讀過這並試圖變化,不果:

HeadJS and jQuery Usage

UPDATE

我嘗試了建議答案:

head.js("http://code.jquery.com/ui/1.9.2/jquery-ui.js"); 
head.js("http://code.jquery.com/jquery-1.8.3.js", function() { 
      var j183 = $.noConflict(true); 
     }); 

,並沒有奏效。

+1

我只是要猜測,並說你的兩個例子不起作用,「var j183」賦值部分在head.js加載你指定的庫之前得到執行。嘗試將「var j183」部分添加到單獨的js文件中,然後通過head.js將其加載到庫之後,並查看發生了什麼。 – joeltine

+0

這似乎是一個很好的猜測......我嘗試了它,並沒有產生任何好的結果。謝謝。 – nicorellius

+1

爲了簡潔起見,你不需要遺漏文本/ JavaScript,你可以完全忘記它,它已經在html5中被棄用了,之前從未真正達到過目的,除非設置爲不同的東西。同樣適用於文本/ css – Robert

回答

1

根據http://headjs.com/

也許你應該嘗試這樣的事情,這將加載這兩個jQuery的庫,然後調用匿名函數,該函數將jQuery庫重新分配給全局變量以供稍後使用。

<script src="js/head.js"></script> 

<script> 
    head.js(<import-several-libraries-here>); 

    head.js("http://code.jquery.com/jquery-1.8.3.js", 
      "http://code.jquery.com/ui/1.9.2/jquery-ui.js", function() { 

     window.j183 = $.noConflict(true); 

     head.js(<import-several-libraries-here>, function(){ 
      init(); 
     }); //that depend on j183 

    }); 

    function init(){ 
     var $ = window.j183; 

     $('body').each(function(){ 
      //do something 
     }); 

     j183('body').each(function(){ 
      //do something else 
     }); 

    } 
</script> 

更新時間:展示如何初始化庫。

+0

在這種情況下,我是否必須使用'window.j183'來代替'$'或只是'j183'? – nicorellius

+0

只是'j183',它應該默認引用'window.j183',除非函數作用域棧也引用'j183'。 如果你想創建一個函數作用域的jQuery版本,你可以將它賦給'$',就像我更新了上面的例子。 –

+0

經過一番搗鼓之後,我得到了這個工作,你的原始解決方案。沒有init()函數...只是head.js和一個回調var ...謝謝。 – nicorellius

1

您需要執行,在一個回調通過head.js依賴於依賴負載的任何代碼:

head.js("/path/to/jquery.js", function() { 

    var j183 = $.noConflict(true); 

}); 
+0

感謝您的回答。我添加了你建議的代碼,目標腳本仍然不起作用。可以肯定的是,我回到了上面聲稱的工作,但它仍然有效,所以我仍然卡住......謝謝! – nicorellius

+1

這將在函數範圍內創建'j183'作爲本地對象,我認爲他需要它作爲其他代碼工作的全局對象。 –