繁体   English   中英

尝试使用Dijit但得到:未定义Dojo

[英]Trying to use Dijit but getting: Dojo is not defined

我正在尝试在模板中包含一个演示dijit小部件。 但是,我不断得到:“未定义Dojo”。 我试图找到答案,但是没有找到答案。 该错误很奇怪,因为所需的dojo.js实际上是由浏览器加载的。

不起作用的是:

dojo.require("dijit.form.MultiSelect");

但是,如果我使用其他dojo模块来执行以下操作:

require(["dojo/store/JsonRest" ...

有用。

我在这里制作了模板的pastebin: http : //pastebin.com/9fm13pSP

这是Dojo 1.7吗?

对于该版本,我认为Dojo希望在全局名称空间中定义函数define()require()

这些功能然后用于需要dojo本身。 您的dojo.js可能具有所有库,但是在您明确require它们之前,它们可能无法使用。

这对我有用(使用Dojo 1.7.2):

<script>
// Dojo 1.7 (AMD)
require(["dojo"], function(dojo){

dojo.require("dijit.form.MultiSelect");
dojo.ready(function(){
        var sel = dojo.byId('dynamic');
        var n = 0;
        for(var i in dijit){
                var c = dojo.doc.createElement('option');
                c.innerHTML = i;
                c.value = n++;
                sel.appendChild(c);
        }
        new dijit.form.MultiSelect({ name: 'dynamic' }, sel);
});

});
</script>

正如Paul Grime指出的那样,如果您将Dojo 1.7包含在async:true标志集中(如您所做的那样),它将仅向全局名称空间公开requiredefine函数。 这是最近引入的向AMD新型模块过渡的一部分。

您现在可以选择

  1. 在代码周围添加一个小的“ require dojo”包装器

  2. 删除“ async:true”标志,并依靠与1.6的向后兼容性

  3. 将代码转换为使用新的1.7 AMD异步模块,而不是使用“ dojo.require”的旧同步样式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM