dojo使用自定义cdn源中的自定义模块

时间:2014-01-20 11:50:05

标签: javascript ajax dojo

我们可以在html页面中引用dojo脚本后使用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>

我创建了 app.js 这样的文件,但没有用。

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

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

1 个答案:

答案 0 :(得分:1)

这里有很多问题。第一个(和真正的问题)是Dojo将相对于您的模块。这意味着它将在CDN的某个位置显示您的应用模块(显然无法找到)。

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

<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> - 标记放在dojo.js脚本标记上方才能使其正常工作。


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

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