2

我想我缺少一些东西。我读过你可以使用 RequireJS 来使用 dojo 模块,而不是使用 Dojo 加载器。我对 RequireJS 和定义模块很满意,但我似乎无法弄清楚发生了什么。我查看了 dojo js 文件,发现它们使用的 define() 与我声明自己的模块时一样。我的文件是这样组织的

// File path
-js
    main.js
    - lib
        .require.js
        -dojo
            // All dojo files

我不确定我缺少什么,但是当我尝试加载 Dojo 模块时,该值未定义。下面是一些示例 HTML:

// index.html
<html>
    <head>
    </head>
    <body>
        // include require script & set main.js
        <script data-main="js/main" src="js/lib/require.js"></script>
    </body>
</html>

和一个示例 main.js 文件...

    // Sample main.js file

    // BaseUrl = js/

    require.config({
        packages : [
            name     : 'dojo',
            location : 'lib/dojo';
        ]
    });

    require(['dojo', 'dojo/dom'], function(dojo, dom) {

        // 'dojo'     should load dojo/main.js
        // 'dojo/dom' should load dojo/dom.js

        // But they have a value of "undefined" when I look at them in the console
        console.log(dojo);
    });

任何想法我做错了什么?作为旁注,有时我会在控制台中收到此错误

TypeError: _3.add is not a function
[Break On This Error]   

_3.add("dom-addeventlistener",!!document.addEventListener);

提前致谢!

4

4 回答 4

1

_3.add("dom-addeventlistener",!!document.addEventListener);实际上是has.add("dom-addeventlistener", !!document.addEventListener);

该错误_3.add is not a function是由于 requirejs 与 dojo 的 AMD 实现不同,它没有定义 has.js API 造成的。Dojo 尝试从 AMD 加载程序中提取 has.js 实现。如果使用外部加载器,则必须通过 dojoConfig 指明。运行缩小构建时,您需要添加staticHasFeatures 到构建配置文件:

staticHasFeatures: {
    "dojo-has-api": 0 // default 1
}

这样做已经为我解决了这个问题。

更多信息

于 2015-01-13T13:23:44.953 回答
1

将所有的 dojo 文件放在 js 文件夹中。

你的文件夹结构应该像

// Folder structure
-js
    -dojo
    -dijit
    -dojox

注意:确保您提供对 js/* 路径的访问权限。这样 url : http://localhost:8080/app/js/dojo/dojo.js可以访问。

然后使用下面的脚本使用 requireJS 添加 dojo 模块,

setTimeout(

    function() {
        var dojoConfig = {
            async : true
        };

    require.config({
        packages : 
            [ {
                name : 'dojo',
                location : '../js/dojo'
            } ],    
    });

    require(
        [ 'dojo', 'dojo/dom' ],
        function(dojo, dom) {
            console.log(dojo);
            dom.byId("myDiv").innerHTML = "updatedHTML content";
    });

}, 1000);

而已。

于 2016-07-15T08:13:30.533 回答
0

首先,您的包配置定义是一个对象数组:

require.config({
    packages : [
        {
            name     : 'dojo',
            location : 'lib/dojo';
        }
    ]
});

之后,您应该检查您的 devtools 网络选项卡,以确保 require.js 正在加载正确的文件并且路径正确。请记住,这location是相对于baseUrl.

希望这有帮助!

于 2012-10-13T19:16:57.203 回答
0

_3表示您正在使用缩小的、独立的 dojo 发行版。如果您想将 Dojo 与不同的加载器一起使用,我相信您想使用从他们的下载页面下载的 Source/SDK 。

于 2013-12-09T21:48:14.910 回答