我正在尝试在我的模板中包含一个demo dijit小部件。但是,我一直在说:“Dojo没有定义”。我试图找到答案,但我不能。这个错误很奇怪,因为浏览器确实加载了所需的dojo.js。
什么是无效的:
dojo.require("dijit.form.MultiSelect");
但是,如果我使用其他dojo模块:
require(["dojo/store/JsonRest" ...
有效。
我在这里制作了模板的pastebin:http://pastebin.com/9fm13pSP
答案 0 :(得分:4)
这是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>
答案 1 :(得分:3)
正如Paul Grime指出的那样,如果你将 async:true 标志设置为Dojo 1.7(就像你所做的那样)它只会公开require
和define
函数到全局命名空间。这是最近推出的新型AMD模块过渡的一部分。
您现在可以选择
在代码
删除“async:true”标志并依赖与1.6的反向兼容性
将您的代码转换为使用新的1.7 AMD异步模块,而不是旧的同步样式和“dojo.require”。