javascript - Dojo.js AMD 加载器 - 类型错误 : can't convert undefined to object

标签 javascript dojo firebug amd

我查找了重复的问题,但没有找到准确的问题。这与Dojo require() and AMD (1.7)有关,但我会以问题的形式问。问题是,为什么我会收到此错误以及为什么 dijit 在 firebug 中显示“3”?

JSP 页面

<script type="text/javascript" src="<%= request.getContextPath() %>/js/dojoConfig.js"></script>
<script type="text/javascript"
src="http://xxxxxxxxxxxxx.com/dojo/1.7.2/dojo/dojo.js.uncompressed.js"></script>
<script type="text/javascript" src="<%= request.getContextPath() %>/js/reviewframe.js"></script>

dojoConfig.js

var dojoConfig = {
// Use the Asynchronous AMD loader.
// --------------------------------
async : true,
// Use debug.
// --------------------------------
isDebug : true,
// Parse the html on load for dojo rendered elements.
// Don't Parse on Load. I'm calling it manually in my main pageLoad.
// --------------------------------
parseOnLoad : false,
};

reviewframe.js(我的“主”)

require(
[ "dojo", "dijit", "dojo/parser", "js/XYDialog.js",
"dijit/layout/ContentPane", "dojox/image/LightboxNano", "dojo/ready",
"dojo/domReady!" ],
function(dojo, dijit, parser, XYDialog) {

XYDialog.js

define([ "dojo", "dijit", "dijit/form/Button", "dijit/TooltipDialog",
    "dijit/form/DropDownButton", "dijit/form/FilteringSelect" ], function(
    dojo, dijit) {

我在 XYDialog.js 中的上述定义上设置了一个断点。我点击继续,然后在控制台中收到此错误:

控制台

focus.js line 382
TypeError: can't convert undefined to object [Break On This Error]  ...attr] = typeof singleton[attr] == "function" ? lang.hitch(singleton, attr) : sin...

如果我在 focus.js 中该行之前设置 Firebug 断点,我会看到 dijit 是数字 3。为什么?我之前在其他地方见过这种情况,我需要的 javascript 或模块最终是数字 3。

编辑: 天哪,我关闭了 Firefox 并加载了没有 firebug 的页面。有用!然后我打开 Firebug ,清除所有断点,它再次工作。谢什。

后续问题:firebug 中的断点会搞乱 AMD 加载程序吗?毕竟它是异步的。您的断点可能会引入计时问题...

最佳答案

这里有两个问题:

  1. 您正在使用文件名而不是模块 ID (XYDialog.js) 加载 AMD 模块,因此它被视为非 AMD 模块并加载。您应该将其放入逻辑包中,或者在配置中定义路径,例如:

    文件结构:

    /js/foo/XYDialog.js
    /js/dojo/dojo.js
    

    代码:

    // reviewframe.js (My 'main')
    
    require(
    [ "dojo", "dijit", "dojo/parser", "foo/XYDialog",
    
  2. 神秘代码“3”通常指的是包的不正确路径。我相信第一个问题与 Firebug 相结合,可能会不一致地给出此错误。

请参阅 http://www.sitepen.com/blog/2012/10/31/debugging-dojo-common-error-messages/#incorrect-package-path 下的注释(这篇文章总体上是我们撰写的一篇文章,它将帮助您确定使用 Dojo 和 AMD 时最常见错误消息的原因)。

关于javascript - Dojo.js AMD 加载器 - 类型错误 : can't convert undefined to object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14758214/

相关文章:

javascript - 如何在react-native中控制打开/关闭模式

javascript - ReactJS 中具有相同 Props 的组件的条件渲染

javascript - 无需插件即可以特定格式获取 jquery 中的时间戳

javascript - Dojo/Angular 范围问题

javascript - 是否可以在 Firefox(版本 45.0.1)中禁用源映射?

javascript - 命名由 JSZip 创建的 .zip 文件

python - 单击浏览器后退按钮时如何恢复到 Dijit 文本框的内容?

dojo - 比较ribs.js和Dojo

html - 无法解释的 UI 呈现问题

javascript - 如何检查浏览器中消失的元素?