2013-02-12 113 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