[英]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标志集中(如您所做的那样),它将仅向全局名称空间公开require
和define
函数。 这是最近引入的向AMD新型模块过渡的一部分。
您现在可以选择
在代码周围添加一个小的“ require dojo”包装器
删除“ async:true”标志,并依靠与1.6的向后兼容性
将代码转换为使用新的1.7 AMD异步模块,而不是使用“ dojo.require”的旧同步样式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.