本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7578114
建立时间:2006年5月29日




[Dojo(Ajax)]dojo的包加载机制
软件技术

lhwork 发表于 2006/7/24 11:54:11

1、前言   dojo利用ajax技术,基本实现的按需要下载js文件,估计与国内jsvm有类似功能(jsvm好久没关注了,不好乱说)。   a、类库开发人员可以在dojo基础上开发自己的javascript类库。(dojo提供的够多的了,并不断扩大)     b、可以按照每个页面的需要,加载有限的类库。   c、提供了很好的package机制。与java不同,采用dojo的包机制有一定写法要求。见后面说明。   d、急剧缩小了类库大小。以前写过篇 (乱评prototype.js)中提到过。其实dojo不象我们想的那么庞大,只需要bootstrap1.js  hostenv_browser.js  bootstrap2.js实现底层代码,其它功能代码按需下载。很担忧propotype.js的不断庞大啊。2、包加载机制源码解读   其实包加载机制只用到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.*等,复杂的处理。3、如何让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中文文档很少,估计国内系统也没什么用的吧。 4、乱评dojoa、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.e、


阅读全文(6495) | 回复(1) | 编辑 | 精华
 


回复:dojo的包加载机制
软件技术

pockey(游客)发表评论于2007/3/22 10:51:16

附件中包括一个简单的例子(有中文问题)。 怎么找不到附件啊? 楼主?


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.046 second(s), page refreshed 144763357 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号