我认为我缺少一些东西。我已经读到可以使用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);


提前致谢!

最佳答案

_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
}


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

Further info

10-05 20:44
查看更多