DOJO 引用错误:未定义声明

DOJO reference error: declare is not defined

本文关键字:未定义 声明 错误 引用 DOJO      更新时间:2023-09-26

我正在遵循jsfiddle链接 http://jsfiddle.net/phusick/894af,当我将相同的代码放入我的应用程序中时,我收到"引用错误:声明未定义"。我在js文件之上有以下声明:

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

提前感谢您的帮助。

使用 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,那么您正在做两次相同的工作。