我找了一些重复的问题,但没找到一个。这与Dojo require() and AMD (1.7)有关,但我会以问题的形式提出。问题是,为什么我得到这个错误,为什么dijit在firebug中显示'3'?
<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>
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,
};
require(
[ "dojo", "dijit", "dojo/parser", "js/XYDialog.js",
"dijit/layout/ContentPane", "dojox/image/LightboxNano", "dojo/ready",
"dojo/domReady!" ],
function(dojo, dijit, parser, XYDialog) {
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或模块的地方看到了这个数字。
编辑: OMG,我关闭了Firefox并加载了没有firebug的页面。有用!然后我打开了萤火虫,清除了所有断点,然后再次起作用。啧。
跟进问题:firebug中的断点是否会破坏AMD加载程序?毕竟它是异步的。您的断点可能会引入计时问题......
答案 0 :(得分: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",
隐秘代码“3”通常是指包裹的错误路径。我相信第一个问题,结合Firebug,可能会不一致地给你这个错误。
请参阅http://www.sitepen.com/blog/2012/10/31/debugging-dojo-common-error-messages/#incorrect-package-path下的注释(本文一般是我们编写的文章,可帮助您确定使用Dojo和AMD时最常见错误消息的原因。)
答案 1 :(得分:0)
重启Firefox并清除Firebug中的断点。