浏览 13485 次
锁定老帖子 主题:dojo的包加载机制
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-05-07
a、类库开发人员可以在dojo基础上开发自己的javascript类库。(dojo提供的够多的了,并不断扩大) b、可以按照每个页面的需要,加载有限的类库。 c、提供了很好的package机制。与java不同,采用dojo的包机制有一定写法要求。见后面说明。 d、急剧缩小了类库大小。以前写过篇 (乱评prototype.js)中提到过。其实dojo不象我们想的那么庞大,只需要bootstrap1.js hostenv_browser.js bootstrap2.js实现底层代码,其它功能代码按需下载。很担忧propotype.js的不断庞大啊。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-05-07
包加载机制源码解读
其实包加载机制只用到bootstrap1.js hostenv_browser.js bootstrap2.js这三个文件。 大家可以看我 例子中 lang.htm ,动态的取lang.js,然后调用函数。使用上也比较简单。 例子中我加了些注释,欢迎大家拍砖。以下我说下个文件作用,以及dojo.require("");函数调用流程。 bootstrap1.js 启动dojo的第一段代码,定义了些全局变量和全局函数。主要定义了dojo.hostenv”接口“,分别由hostenv_*.js来实现。dojo并不只用在网页环境中。 hostenv_browser.js,浏览器环境下实现dojo.hostenv的某些方法。根据navigator对象判断当前浏览器的版本,类型,支持的插件....(见dojo.render对象)。还给window.onload()方法注册了dojo的几个方法。 bootstrap2.js 定义了几个面向类库使用者的几个方法。主要有 dojo.require dojo.provide 等。这些方法其实调用bootstrap1.js中的方法。 当我们调用 dojo.require("dojo.lang");时,有以下几个流程。 a、dojo.hostenv.loadModule方法,在bootstrap1.js中,根据传入的参数如dojo.lang,转化成文件名 src/lang.js文件。(当然对于失败流程,如cache检查,异常处理等,这不具体细诉了) b、dojo.hostenv.loadPath方法,得到javascript文件的url,用xmlhttp得到js文件的内容,eval(s)执行,相当于引入了该文件。 c、写入cache,加标识等后续方法。告诉dojo,我们加载过这个模块了。 d、关于dojo的根文件路径比较麻烦,请读 hostenv_browser.js 中设置djConfig["baseScriptUri"] 部分。xmlhttp中js的url是 getBaseScriptUri()+getModulePrefix+lang.js(''+'src'+'/lang.js') 组成。 具体dojo流程还是比较复杂的,还支持dojo.lang.*等,复杂的处理。 |
|
返回顶楼 | |
发表时间:2006-05-07
如何让dojo加载自己的类库
我在附件中包括一个简单的例子(有中文问题)。有以下几个注意的地方。 a、一定要引入bootstrap1.js hostenv_browser.js bootstrap2.js三个文件。dojo下载压缩包里的dojo.js包括了这三个文件,但也包括可许多你可能用不到的类库(lang io等) b、设置你的类库”包名“。如dojo.setModulePrefix('com.founder','javascript');说明com.founder包下文件都在javascript文件夹下建立。 你的类库必须放到javascript文件夹下面。 c、你的类库文件。如javascript/myjs.js文件,必须首先声名 dojo.provide("com.founder.myjs");你的类库必须以com.founder.myjs开头。 d、你的函数或变量必须定义为com.founder.myjs.fun。 e、当你调用的时候,只需dojo.require("com.founder.myjs");。这样,myjs.js文件会下载到本地。可以直接应用了。 关于自己完成自己的类库,建议先多读读dojo的其他代码吧。这样才能更好的应用dojo包机制。应用了dojo,可能javascript的写法上与平时绝对不一样,但请注意,dojo千万别乱用,就google dojo中文文档很少,估计国内系统也没什么用的吧。 |
|
返回顶楼 | |
发表时间:2006-05-07
a、javascript类库的文档实在不好弄,就dojo官方网站上转半天也找不到个系统的介绍,中文文档也很少。maillist到是挺活跃的。不看源代码能用好dojo我估计悬。
b、dojo野心极大,需要做的工作还很多。无形中加大dojo的应用难度。就象java中的spring,还好有EJB这个垫脚石。可dojo,推广难度不小啊。 c、下载包中压缩版dojo.js包括了../src/bootstrap1.js,../src/hostenv_browser.js,../src/bootstrap2.js,../src/lang.js,../src/string.js,../src/io.js,../src/dom.js,../src/io/BrowserIO.js,../src/event.js,../src/event/topic.js,../src/event/browser.js,../src/event/__package__.js,../src/alg/Alg.js,../src/alg/__package__.js,../src/uri/Uri.js,../src/math.js,../src/graphics/color.js,../src/style.js,../src/html.js,../src/math/curves.js,../src/animation/Animation.js,../src/animation/__package__.js,../src/fx/html.js,../src/fx/__package__.js,../src/graphics/htmlEffects.js,../src/graphics/__package__.js 这么多个文件,140k。其实也不大,但包括了很多模块。估计dojo的定位就是开发"One page One Application"吧。一般的web应用程序prototype.js就够了。 d、dojo上手相对较难,不象prototype.js。(虽然它们不是一类型的项目,但我喜欢拿一块比较,原因之一是它们没有服务器端的功能)。我相信dojo提供的功能能够覆盖prototype.js,或者我们可以自己把prototype.js移植到dojo. |
|
返回顶楼 | |
发表时间:2006-05-07
例子代码
http://www.blogjava.net/Files/zkjbeyond/myDojo.rar |
|
返回顶楼 | |
发表时间:2006-05-10
果然好东西,感谢lz贡献
|
|
返回顶楼 | |
发表时间:2006-05-22
dojo很好用的,如果使用,最好订阅maiinglist。
dojo绝对超出了prototype的范围的。最新的dojo的文档还算可以了。我现在用它为基础做自己的ui组件,很爽的。 刚接触是有些难度,不过只要越过开始那道坎,后面还是一路顺风的。 纠正一个小错误: d、你的函数或变量必须定义为com.founder.myjs.fun。 这个是不一定需要的,前提是你的包com.founder.myjs已经定义过了。 已经定义了包空间。 另外,如果js中使用了中文,那需要将js用utf8编码, 否则会乱码(当你使用dojo.require),除非apache设置defaultcharset。 |
|
返回顶楼 | |
发表时间:2006-06-04
读取根目录下 dojo.js文件。 文件名必须是dojo.别的有问题。见hostenv_browser.js hostenv_browser.js 58行 if(((djConfig["baseScriptUri"] == "" ,dojo是关键字.要不手工配置baseScriptUri
DEBUG: loadModule 方法开始。 参数:dojo.lang DEBUG: relpath:dojo/lang.js DEBUG: parentModule:dojo DEBUG: parentModulePath:mysrc DEBUG: syms:mysrc,lang DEBUG: nsyms:dojo,lang DEBUG: last:lang DEBUG: 正式开始 DEBUG: 结尾不是* DEBUG: relpath:mysrc/lang.js DEBUG: modulename:dojo.lang DEBUG: failed loading mysrc/lang.js with error: [TypeError: Access is denied. ] DEBUG: ok:false DEBUG: failed loading mysrc.js with error: [TypeError: Access is denied.] DEBUG: failed loading __package__.js with error: [TypeError: Access is denied. ] FATAL: Could not load 'dojo.lang'; last tried '__package__.js' 以上是执行你的例子时的报错,但是这些程序在IE6中运行正常。请问我应该如何解决这个问题?哪个地方需要调整? |
|
返回顶楼 | |
发表时间:2006-11-21
好东西,感谢贡献者.
下载包中压缩版dojo.js包括了../src/bootstrap1.js,../src/hostenv_browser.js,../src/bootstrap2.js.可是我用<script type="text/javascript" src="../dojo/dojo.js"></script> 代替 <script type="text/javascript" src="mysrc/bootstrap1.js"></script> <script type="text/javascript" src="mysrc/hostenv_browser.js"></script> <script type="text/javascript" src="mysrc/bootstrap2.js"></script>发现在引入自定义类(如你的com.founder.myjs)时有问题 这是为什么呢? |
|
返回顶楼 | |