2013-02-12 66 views
3

我是RequireJS的新手,所以這可能是一個愚蠢的問題!DataJS庫不在RequireJS中加載

我正在使用require-jquery。

我想加載DataJS庫作爲模塊。它是一個獨立的庫,不依賴於jQuery。

這是我的HTML文件START.HTM的樣子:

<html> 
<head> 

</head> 
<body> 
    <script type="text/javascript" src="Scripts/Loader.js"></script> 
</body> 
</html> 

這是Loader.js文件的樣子:

(function (window, undefined) { 

    var script = document.createElement('script'); 
    script.async = true; 
    script.src = "scripts/require-jquery.js"; 

    var entry = document.getElementsByTagName('script')[0]; 
    entry.parentNode.insertBefore(script, entry); 
    script.onload = script.onreadystatechange = function() { 
     var rdyState = script.readyState; 
     if (!rdyState || /complete|loaded/.test(script.readyState)) { 

      require([ 
         "jquery", 
         "scripts/datajs-1.1.0" 
        ], 
         function (jQueryHandle, odata) { 
          alert(odata); 
         }); 

      script.onload = null; 
      script.onreadystatechange = null; 
     } 
    }; 

})(window); 

這是我的文件結構:

Project 
| 
|----- start.htm 
| 
|----- Scripts 
     | 
     |----- datajs-1.1.0.js 
     | 
     |----- require-jquery.js 
     | 
     |----- loader.js 

我認爲datajs庫支持AMD,因爲這是庫的樣子:

(function (window, undefined) { 

    var datajs = window.datajs || {}; 
    var odata = window.OData || {}; 

    // AMD support 
    if (typeof define === 'function' && define.amd) { 
     define('datajs', datajs); 
     define('OData', odata); 
    } else { 
     window.datajs = datajs; 
     window.OData = odata; 
    } 

    /* -------------------- */ 

})(this); 

我在做什麼錯?

回答

0

我認爲是定義([...而不是需要([..

+0

對於點我在這裏做的,關於什麼是更好的名字,如果它是定義或要求的話,它不會起作用。 – JDC 2016-01-22 14:11:11

2

隨着requirejs我有這樣的代碼:

<script type="text/javascript" src="0.1/Clientscripts/requirejs/2.1.11/require.js"></script> 
<script type="text/javascript"> 
    requirejs.config({ 
     'baseUrl': '0.1/Clientscripts/', 
     'paths': { 
      'datajs':'datajs/1.1.2/datajs.min', 
      'OData':'datajs/1.1.2/datajs.min' 
     }, 
     'shim': { 
      'OData':['datajs'] 
     } 
    }); 
</script> 

在我自己的模塊,我這樣做:

define(['datajs','OData'], function (datajs,OData) { 
    console.log(datajs); 
    console.log(OData); 
    console.log(OData.read); 
} 

這裏的datajs和OData對象是可以訪問的

Personaly我相信這有點尷尬, IPLE「paths'條目到同一個文件..

這本來是清潔的,如果你可以說:

'paths': { 'datajs':'path/to/datajs',... 
//and then 
require(['datajs/core','datajs/OData'],... 

但話又說回來..沒有什麼是完美的:)

+0

謝謝男人似乎在工作,我一直在努力,但我沒有得到如何工作:S,但作品 – 2014-05-29 21:05:31

+0

這應該被接受爲答案..它也幫助我! – Matt 2015-07-22 01:46:41