zyj0021 2009-08-11 21:11
浏览 499
已采纳

关于dojo的require

最近对动态载入js,css文件的问题感兴趣,所以就对dojo的源代码进行了研究。
代码到是能看懂个八分左右,是利用了xml对象进行载入的
不过看完源代码,老是有点不踏实,所以想问下这个问题
如果在利用xml载入js脚本的时候,是同步,还是异步的呢??
这样我说个例子吧:
例如我有个函数
function doSomething()
{
    dojo.require('a.b');//也就是载入a/b.js文件
    //在a/b.js里面我会用个变量,例如我就在这个文件写var window.xx="1";其他什么都没有
     alert(window.xx);
}

问题:alert(window.xx);这句的执行,是在导入js文件载入完毕后执行呢,还是同步,也就是说在xml对象等待js载入过程中执行呢(这里举例可能简单,可以换个想法,如果载入的js文件很大或者网络不是很好的情况下,要花很长时间载入这个js文件)??

如果是同步完成呢,这样有可能因为上面的window.xx未初始化到,而导致后面的alert(window.xx)显示undefined?

还有个问题:按照官方的例子来,也出错:
我要导入自己的js文件,结构如下:
/myapp/js/dojo/dojo/dojo.js
/myapp/js/foo/bar.js

dojo.registerModulePath("foo", "../../foo");
dojo.require("foo.bar");

我这个bar.js就一个alert(1)看看是否有载入效果

结果:js文件载入成功,但是仍然报错,Could not load....

看源代码,registerModulePath只对_modulePrefixes[module]赋值了而没有对_loadedModules[moduleName]赋值
因为调用的时候用了_loadUriAndCheck这个方法,有一句                                           
return !! (ok && this._loadedModules[moduleName])

那个ok表示载入文件成功,因为this._loadedModules[moduleName]赋值而导致变成了false,而抛出异常

不知道这个是否是bug!我想应该不是吧,可能是我不知道怎么写这些代码需要哪些前提,或者需要设置下djConfig什么的,请熟悉dojo的人指教下或给个成功个例子打个包。






  • 写回答

2条回答 默认 最新

  • iteye_9737 2009-08-12 23:01
    关注

    补充一下:自定义的包一般应该和dojo、dijit、dojox放同级目录里。请参考:
    [code="javascript"]
    dojo.provide("dijit.Tree");
    //dijit和dojo是同级目录。。使用时可以直接dojo.require("dijit.Tree")
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记