DOJO引用错误:未定义声明

时间:2015-03-11 10:07:23

标签: javascript dojo

我正在关注jsfiddle链接http://jsfiddle.net/phusick/894af,当我将相同的代码放入我的应用程序时,我得到了“引用错误:声明未定义”。我在我的js文件上面有以下声明:

dojo.require("dojo._base.declare");
dojo.require("dojox.form.CheckedMultiSelect");

提前感谢您的帮助。

1 个答案:

答案 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/xhrput()get(),......等方法成为dojo.xhrGet()dojo.xhrPut(),......
  • dojo/_base/langmixin()hitch(),......等方法成为dojo.mixin()dojo.hitch(),......
  • dojo/dombyId()等方法成为dojo.byId()
  • dojo/on:您必须使用dojo.connect()作为此
  • dijit/registrybyId()等方法成为dijit.byId()
  • ...

但是,如果您正在使用Dojo 1.7,那么即使所有其他代码都是用非AMD代码编写的,您也应该将代码保留在AMD中。最终你必须将你的所有代码升级到AMD语法,如果你现在花时间将代码转换为非AMD,你以后必须再将它转换为AMD,你也要做同样的事情工作两次。