我正在关注jsfiddle链接http://jsfiddle.net/phusick/894af,当我将相同的代码放入我的应用程序时,我得到了“引用错误:声明未定义”。我在我的js文件上面有以下声明:
dojo.require("dojo._base.declare");
dojo.require("dojox.form.CheckedMultiSelect");
提前感谢您的帮助。
答案 0 :(得分:1)
使用Dojo AMD,您可以告诉哪个模块映射到哪个参数,例如映射到名为dojo/_base/declare
的变量的declare
。
但是,在非AMD代码中,您没有这种可能性。除此之外,您必须执行以下操作:
dojo.require('dojo._base.declare'); // Import
dojo.declare(/** Parameters */); // Use
实际上,dojo/_base
中的模块已经在Dojo核心中,如果我没有弄错的话,那么在这种情况下你可以放弃dojo.require()
行。
对于以下AMD代码:
require(["dojo/_base/declare"], function(declare) {
var MyCheckedMultiSelect = declare(CheckedMultiSelect, {
/** Stuff */
});
});
您可以在非AMD中编写以下内容:
var MyCheckedMultiSelect = dojo.declare(CheckedMultiSelect, {
/** Stuff */
});
但是,请确保在运行Dojo 1.7时禁用异步模式,例如:
<script>
dojoConfig = {
parseOnLoad: false,
async: true
};
</script>
此规则适用于dojo/_base
中的大多数(如果不是全部)模块以及多个DOM模块,例如:
dojo/_base/xhr
:put()
,get()
,......等方法成为dojo.xhrGet()
,dojo.xhrPut()
,...... dojo/_base/lang
:mixin()
,hitch()
,......等方法成为dojo.mixin()
,dojo.hitch()
,...... dojo/dom
:byId()
等方法成为dojo.byId()
dojo/on
:您必须使用dojo.connect()
作为此dijit/registry
:byId()
等方法成为dijit.byId()
但是,如果您正在使用Dojo 1.7,那么即使所有其他代码都是用非AMD代码编写的,您也应该将代码保留在AMD中。最终你必须将你的所有代码升级到AMD语法,如果你现在花时间将代码转换为非AMD,你以后必须再将它转换为AMD,你也要做同样的事情工作两次。