Javascript 尝试使用Dijit但未定义get:Dojo
我试图在我的模板中包含一个演示dijit小部件。然而,我不断得到:“Dojo没有定义”。我试图找到答案,但我找不到。这个错误很奇怪,因为浏览器确实加载了所需的dojo.js 不起作用的是:Javascript 尝试使用Dijit但未定义get:Dojo,javascript,dojo,Javascript,Dojo,我试图在我的模板中包含一个演示dijit小部件。然而,我不断得到:“Dojo没有定义”。我试图找到答案,但我找不到。这个错误很奇怪,因为浏览器确实加载了所需的dojo.js 不起作用的是: dojo.require("dijit.form.MultiSelect"); 但是,如果我使用其他dojo模块执行以下操作: require(["dojo/store/JsonRest" ... 它起作用了 我在这里创建了我的模板的粘贴库:这是Dojo 1.7吗 对于该版本,我认为Dojo希望在全局命名
dojo.require("dijit.form.MultiSelect");
但是,如果我使用其他dojo模块执行以下操作:
require(["dojo/store/JsonRest" ...
它起作用了
我在这里创建了我的模板的粘贴库:这是Dojo 1.7吗
对于该版本,我认为Dojo希望在全局命名空间中定义函数define()
和require()
然后使用这些函数来要求dojo本身。您的dojo.js中可能包含所有库,但在您明确地需要它们之前,它们可能无法使用
这对我很有用(使用Dojo 1.7.2):
//Dojo 1.7(AMD)
require([“dojo”],function(dojo){
require(“dijit.form.MultiSelect”);
ready(function()){
var sel=dojo.byId('dynamic');
var n=0;
for(dijit中的变量i){
var c=dojo.doc.createElement('option');
c、 innerHTML=i;
c、 值=n++;
所选儿童(c);
}
新的dijit.form.MultiSelect({name:'dynamic'},sel);
});
});
正如Paul Grime所指出的,如果将Dojo 1.7与async:true标志集一起包含(正如您所做的那样),那么它将只向全局命名空间公开require
和define
函数。这是向最近推出的新型AMD模块过渡的一部分
您现在可以选择其中之一
在代码周围添加一个小小的“requiredojo”包装器
删除“async:true”标志并依赖于1.6的后端兼容性
将代码转换为使用新的1.7AMD异步模块,而不是使用“dojo.require”的旧同步样式
<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>