Dojo使用自定义CDN源的自定义模块



我们可以在我们的html页面中使用dojo工具包。

<script src="//ajax.googleapis.com/ajax/libs/dojo/1.9.2/dojo/dojo.js"></script>
<script type="text/javascript">
    require(["dojo/dom"], function (dom) {
        var button = dom.getById("ok");
    });
</script>

我们可以在我们的脚本中使用" Dojo/dom"

我想在服务器中创建自己的JavaScript模块并在每个地方使用它。

例如,我有一个域http://mydomain.com/api/v1/app.js

我应该使用此 app.js 这样。

<script src="//ajax.googleapis.com/ajax/libs/dojo/1.9.2/dojo/dojo.js"></script>
<script src="//mydomain.com/api/v1/app.js"></script>
<script type="text/javascript">
    require(["dojo/dom","app/something"], function (dom,something) {
    var st = new something();
    });
</script>

i创建 app.js 这样的文件,但不起作用。

declare(["dojo/_base/declare"],
    function (declare) {
        return declare(null, {
            constructor: function () {
                console.log("hello");
            }
        });
})

我应该如何创建我的app.js文件?

这里有多个问题。第一个(和真正的问题)是Dojo将相对寻找您的模块。这意味着它将在您的应用模块的CDN上查看某个位置(显然找不到)。

要更改包的位置,您必须配置Dojo配置的软件包部分。在您的情况下是:

<script type="text/javascript">
    dojoConfig = {
        packages: [{
            name: 'custom',
            location: 'http://mydomain.com/api/v1/'
        }]
    }
</script>

然后您可以使用:

获得模块
require(["custom/app"], function(app) {
    // Do something
});

重要:确保在Dojo加载器(dojo.js)之前加载Dojo配置。因此,您必须将此<script> -TAG放在dojo.js脚本标签上方才能使其正常工作。


另一个问题是,在app.js中,您必须将define()用作第一个语句,而不是 declare()。例如:

define(["dojo/_base/declare"],
    function (declare) {
        return declare(null, {
            constructor: function () {
                console.log("hello");
            }
        });
})

最新更新