收藏 分销(赏)

dojo学习重点笔记专业资料.doc

上传人:精*** 文档编号:2954020 上传时间:2024-06-12 格式:DOC 页数:68 大小:267.04KB
下载 相关 举报
dojo学习重点笔记专业资料.doc_第1页
第1页 / 共68页
dojo学习重点笔记专业资料.doc_第2页
第2页 / 共68页
dojo学习重点笔记专业资料.doc_第3页
第3页 / 共68页
dojo学习重点笔记专业资料.doc_第4页
第4页 / 共68页
dojo学习重点笔记专业资料.doc_第5页
第5页 / 共68页
点击查看更多>>
资源描述

1、 Dojo学习笔记(1. 模块与包) Intro:Dojo是一种非常强大面向对象JavaScript工具箱,建议读者可以去补充一下JavaScript下如何使用OO进行编程,这对于你后来阅读Dojo Source有很大用处.请人们下载dojo 0.3.1,如下阐明均针对此版本翻译自Getting Started1:把Dojo加入到咱们Web程序中1. 标志djConfig = isDebug:false ;djConfig是Dojo里一种全局对象,其作用就是为Dojo提供各种选项,isDebug是最惯用属性之一,设立为True以便可以在页面上直接看到调试输出,固然其中尚有些属性与调试关于,这里

2、就不罗索了2. 引用 dojo 启动代码这样你就引用了dojo代码,并可以直接使用其中某些惯用对象,下载下来dojo.js是压缩(remove comments and space)后裔码,要阅读话,建议阅读dojo.js.uncompressed.js,dojo.js大概有127K,而未压缩前有211K,ok,为什么会这样大呢,本来其已经把某些惯用模块整合进dojo.js里,因而显得大了一点,build.txt里就阐明了默认dojo.js包括了哪些模块3. 声明你所要用到包dojo.require(dojo.math);dojo.require(dojo.io.*);dojo.require

3、(dojo.widget.*);你就把这些代码当成是javaimport语句或C#中using语句同样,如果你不require话,而模块自身又没有整合在dojo.js中,是会浮现脚本错误喔2. 针对不同需求提供预整合包Dojo自身是由许多模块所组合而成,但是由于顾客需求多样性,dojo针对不同需求而提供了不同版本,顾客在下载dojo时候就看见可以选取诸多版本,例如Ajax版和Widget版,每个版本最重要区别就在于dojo.js文献,但是除此之外,每一种版本都是全功能,dojo.js依照版本不同而整合进了不同模块3. 直接获取Dojo最新源代码一方面你必要安装 Subversion,当Subv

4、ersion在你电脑上可以正常工作后,你就可以通过如下命令下载dojo源代码:svn co 这会在你当前目录下创立一种 trunk 目录;如果你但愿直接Get到当前目录,用这个命令:svn co 或者你但愿Get到当前目录下 MyDir 目录,用这个命令:svn co 模块与包模块Dojo代码被划分为逻辑单元称之为模块,这有点类似于Java中package,除了dojo模块可以包括类(类似于java中classes)和简朴函数例如:模块dojo.html包括了一系列函数,例如dojo.html.getContentBox(),模块dojo.dnd包括了一系列HtmlDragObject类注意名

5、称商定,函数首字母为小写字母,类首字母为大写模块也可以称之为命名空间包在多数状况下,dojo模块只需要定义在一种文献就可以了,但有时,一种模块也许划分到各种文献,例如:模块dojo.html,本来是定义在一种文献中,可是由于功能增强,文献逐渐变大,咱们不得不将其拆分为各种文献,这重要是为性能考虑,以便浏览器可以只下载其需要用到代码,不幸是其实现细节对于dojo顾客看起来不那么透明,你必要懂得你想要用到功能究竟是包括在哪个文献,然后才干require并使用它这样每一种文献都称之为一种包dojo.require(dojo.html.extras)将引用文献 src/html/extras.js,这

6、将定义模块 dojo.html 若干(并非所有)函数据我所知,尽管单个文献可以定义包里各种类,单个脚本文献不能定义各种模块 (在Java可以等效于在一种文献中定义2个类),并且,包名称和模块名称可以不同,例如:包dojo.widget.Button定义了dojo.widget.html.Button基本上你应当这样以为,包和模块尽管密切有关,但是是两个完全不同实体为什么会有模块和包这样概念?为什么会有模块和包这样概念?为了满足你应用程序只需要加载其所用到东西需求,充分运用模块化设计长处,dojo维护了最小足印以便仍能提供你所需要功能,为什么要你顾客挥霍时间去下载用不到JavaScript,当一

7、种包就是一种js文献时,一种模块本质上就是一种命名空间,例如:dojo.style 或 dojo.html.extras多数简朴状况下,一种包包括了一种模块,但更常用是,一种模块也许被拆分为几种包文献运用包和模块,将能保证你可以交付最有关功能代码,最小限度减少代码膨胀和消除由此带来不好顾客体验,这就是模块设计重要目的,通过模块化,你可以引入自定义模块(你自己拥有JavaScript 工具),并且维护模块对于核心代码库基本不会产生什么影响此外,Dojo模块系统也提供了内建机制来使用代码提供命名空间,例如,通过模块dojo.event定义Dojo事件系统如何引用设立引用语句你如何才干懂得该引用哪个

8、包到dojo.require()?1. 模块一方面,拟定你要使用什么模块,这个例子咱们假定你要使用 dojo.lfx.html2. 包搜索代码后你发现dojo.lfx.html定义在2个文献:src/lfx/html.jssrc/lfx/extras.js依照你要用到功能,你可以dojo.require(dojo.lfx.html);或dojo.require(dojo.lfx.html);dojo.require(dojo.lfx.extras);通配符新顾客也许会对dojo.lfx.*这样就可以代替上面2句而感到诧异,事实上,_package_.js 中已经定义了通配符可以代替语句,并且这

9、样可以让dojo依照当时环境而决定加载详细模块/Dojo学习笔记(2. djConfig解说)djConfig是dojo内置一种全局设立对象,其作用是可以通过其控制dojo行为一方面咱们需要在引用dojo.js前声明djConfig对象,以便在加载dojo.js时候才可以获得所设立值,虽然在0.3版本后来dojo支持在加载后设立,但是强烈建议你把声明djConfig代码作为第一段script一种完整djConfig对象定义如下(值均为dojo默认值)var djConfig = isDebug:false,debugContainerId:,bindEncoding:,allowQueryCo

10、nfig:false,baseScriptUri:,parseWidgets:truesearchIds:,baseRelativePath:,libraryScriptUri:,iePreventClobber:false,ieClobberMinimal:true,preventBackButtonFix:true,;isDebug是一种很有用属性,顾名思义,如果设立为真,则所有dojo.Debug输出有效,开发时应当设立为true,发布时应当设立为falsedebugContainerId同样也是与调试关于,如果不指定话,调试信息将会直接运用 document.write输出,这样也许会

11、破坏页面整体布局,因此你可以指定任何一种可以作为容器html元素id作为调试信息输出容器allowQueryConfig,这个属性指明 dojo与否容许从页面url参数中读取djConfig中有关属性,当值为true时,dojo会优先从url参数中读取djConfig其她属性,例如:http:/server/dojoDemo.htm?djConfig.debugContainerId=divDebugbaseScriptUri,普通不需要设立,dojo会自动依照你引用dojo.js途径设立这个值,例如,自动获取值便是 ./dojo/ps:如果你有各种工程需要同步引用dojo.js话,建议也把d

12、ojo当作一种独立工程,引用时候采用绝对途径就可以了parseWidgets,这个是可以控制dojo与否自动解析具备dojoTypehtml元素为相应widget,如果你没有使用任何Widget,建议设立为false以加快dojo加载速度searchIds,这是一种字符串数组,定义了所有需要解析为widgethtml元素ID,如果ID不在其中html元素是不会被解析,当数组为空数组时,则所有具备dojoType元素都会被解析尚有一种bindEncoding,是用来设立默认bind祈求编码方式至于其他属性,不是用处不大,就是不懂得有什么作用在实际开发中,可以把djConfig定义放在一种js文献

13、里,并将其作为第一种引用js文献,这样应当是最以便。/Dojo学习笔记(3. Dojo基本对象和办法)这里所说基本对象和办法是指不Require任何包就可以调用对象和办法匿名函数在开始前,我想简介一下js里匿名函数,这个在阅读dojo源代码时候,会发现处处均有匿名函数;(function()alert(123);)();/前面分号是一种空语句,是可以不要匿名函数。一种匿名函数就是一种没有名字函数。你可以以为她们是一次性函数。当你只需要用一次某个函数时,她们就特别有用。通过使用匿名函数,没有必要把函数始终放在内存中,因此使用匿名函数更加有效率。固然你也可以主线不定义函数,但是使用匿名函数可以把你

14、代码分段,就像C#中#region同样dojo.byId非常有用一种办法,与prototype.js知名$同样似乎此前版本尚有dojo.byIdArray,但是最新版本已经找不到这个函数了(除了srccompat0.2.2.js)如果有各种元素具备指定id,则返回是一种集合Usage Example:dojo.byId(divTest);dojo.byId(divTest,document);dojo.byId(document.getElementById(divTest);dojo.versiondojo版本,可以获得major,minor,patch,flag和revision这个对象没

15、什么太大用处,除非你要依照dojo版本选取执行你代码dojo.raise抛出一种异常dojo.errorToString将异常转换为字符串Usage Example:trydojo.raise(打印失败,new Error(文献不存在);catch(e)alert(dojo.errorToString(e);dojo.render系统环境对象dojo.render.name 返回 browser ,阐明是工作在浏览器下dojo.render.ver 返回 4 ,似乎没什么用dojo.os.win 返回true阐明操作系统是Windowsdojo.os.linux 返回true阐明操作系统是Li

16、nuxdojo.os.osx 返回true阐明操作系统是MacOSdojo.html.ie 返回true阐明浏览器是Internet Explorerdojo.html.opera 返回true阐明浏览器是Operadojo.html.khtml 返回true阐明浏览器是Konquerordojo.html.safari 返回true阐明浏览器是Safaridojo.html.moz 返回true阐明浏览器是Mozilla FireFoxdojo.svg.capable 返回true阐明浏览器支持svgdojo.vml.capable 返回true阐明浏览器支持vmldojo.swf.capa

17、ble 返回true阐明浏览器支持swfdojo.swt.capable 返回true阐明浏览器支持swt (IBM开发Standard Widget Toolkit)如果dojo.html.ie为true话dojo.html.ie50 返回true阐明浏览器是IE 5.0dojo.html.ie55 返回true阐明浏览器是IE 5.5dojo.html.ie60 返回true阐明浏览器是IE 6.0dojo.html.ie70 返回true阐明浏览器是IE 7.0dojo.addOnLoad可以加载指定函数到window.load时执行,好处就是可以很以便在window.load时执行各种

18、函数Usage Example:dojo.addOnLoad(init);/init是一种函数dojo.addOnLoad(myObject,init);/init是myObject对象一种办法dojo.require如果你想调用一种模块对象时候,你应当一方面用dojo.require来祈求这个模块,dojo会依照你祈求自动获得相应js文献,并加载到内存中,这样你才干调用或创立其中对象dojo会自动维护已加载模块列表,因此是不会重复加载模块Usage Example:dojo.require(dojo.event);dojo.requireIf=dojo.requireAfterIf可以依照指

19、定条件来决定与否加载指定模块Usage Example:dojo.requireIf(dojo.html.ie,dojo.html);/如果dojo.html.ie为true,才会加载dojo.html模块dojo.provide除非你要开发自己模块,否则是用不到这个办法,你可以这句当作是向系统注册这个模块名称Usage Example:dojo.provide(dojo.custom);dojo.exists判断指定对象与否具备指定名称办法Usage Example:dojo.exists(dojo,exists);/will return truedojo.hostenv.getText返

20、回指定url内容PS:由于浏览器安全限制,因而只能用于获得同域名url内容,否则会报告权限不够Usage Example:aSync = false;/同步,保证返回内容不为nullsilent = true;/不抛出错误s = dojo.hostenv.getText(,aSync,silent);/返回Google首页HTMLalert(s);dojo.debug输出调试信息,如果在djConfig中指定了debugContainerId,则输出到指定console容器中,否则直接document.write所有调试信息均以 DEBUG:开头Usage Example:dojo.debug

21、(这是调试信息);dojo.hostenv.println与dojo.debug类似,不同是,输出内容没有 DEBUG:Usage Example:dojo.hostenv.println(这是普通输出信息);dojo.debugShallow输出指定对象所有信息(Shallow阐明并不会遍历到下一级别对象属性)以供调试Usage Example:dojo.debugShallow(dojo.render.html);/Dojo学习笔记(4. dojo.string & dojo.lang)模块:mon / dojo.stringmon 和 dojo.string 是同样,只要require其

22、中一种就可以使用如下办法dojo.string.trim去掉字符串空白Usage Example:s = abc ;dojo.string.trim(s);/will return abcdojo.string.trim(s,0);/will return abcdojo.string.trim(s,1);/will return abc dojo.string.trim(s,-1);/will return abcdojo.string.trimStart去掉字符串开头空白Usage Example:s = abc ;dojo.string.trimStart(s);/will return

23、 abc dojo.string.trimEnd去掉字符串结尾空白Usage Example:s = abc ;dojo.string.trimEnd(s);/will return abcdojo.string.repeat生成由同一字符(串)重复构成字符串Usage Example:dojo.string.repeat(a,4);/will return aaaadojo.string.repeat(1234,3,-);/will return 1234-1234-1234dojo.string.pad使用字符补齐字符串Usage Example:dojo.string.pad(100,6

24、);/will return 000100dojo.string.pad(100,6,0,1);/will return 000100dojo.string.pad(100,6,0,-1);/will return 100000dojo.string.padLeft使用字符补齐字符串开头Usage Example:dojo.string.padLeft(100,6);/will return 000100dojo.string.padRight使用字符补齐字符串结尾Usage Example:dojo.string.padRight(100,6);/will return 100000模块:m

25、on / dojo.langmon 和 dojo.lang 是同样,只要require其中一种就可以使用如下办法dojo.lang.mixin将一种对象办法和属性增长到另一种对象上Usage Example:var s1 = name:TestObj,test1:function()alert(this is test1!);var s2 = value:1000,test2:function()alert(this is test2!);var d = ;dojo.lang.mixin(d,s1,s2);/执行后d就具备了s1和s2所有属性和办法d.test1();dojo.lang.ext

26、end为指定类原型扩展办法与属性Usage Example:TestClass = function() ;dojo.lang.extend(TestClass,name:demo,test:function()alert(Test!););var o = new TestClass();/TestClass本来是没有test办法,但是extend后来就有test办法了o.test();dojo.lang.find=dojo.lang.indexOf查找指定对象在指定数组中位置Usage Example:var arr = 1,2,3,3,2,1;dojo.lang.find(arr,2);/

27、will return 1dojo.lang.find(arr,2,true);/will return 1dojo.lang.find(arr,2,true);/will return -1dojo.lang.find(arr,2,false);/will return 1dojo.lang.find(arr,2,true,true);/will return 4dojo.lang.findLast=dojo.lang.lastIndexOf查找指定对象在指定数组中位置,从后往前查Usage Example:var arr = 1,2,3,3,2,1;dojo.lang.findLast(a

28、rr,2);/will return 4dojo.lang.findLast(arr,2,true);/will return 4dojo.lang.findLast(arr,2,true);/will return -1dojo.lang.findLast(arr,2,false);/will return 4dojo.lang.inArray查找指定对象与否在指定数组中Usage Example:var arr = 1,2,3;dojo.lang.inArray(arr,1);/will return truedojo.lang.inArray(arr,4);/will return fa

29、lsedojo.lang.isObject判断输入类型与否为对象Usage Example:dojo.lang.isObject(new String();/will return truedojo.lang.isObject(123);/will return falsedojo.lang.isArray判断输入类型与否为数组Usage Example:dojo.lang.isArray(a:1,b:2);/will return falsedojo.lang.isArray(1,2,3);/will return truedojo.lang.isFunction判断输入类型与否为函数Usa

30、ge Example:dojo.lang.isFunction(function() );/will return truedojo.lang.isString判断输入类型与否为字符串Usage Example:dojo.lang.isString();/will return truedojo.lang.isString(0);/will return falsedojo.lang.isAlien判断输入类型与否为系统函数Usage Example:dojo.lang.isAlien(isNaN);/will return truedojo.lang.isBoolean判断输入类型与否为布尔

31、类型Usage Example:dojo.lang.isBoolean(21);/will return truedojo.lang.isNumber判断输入类型与否为数值,依照注释所说,此函数使用不太可靠,但是可替代使用系统函数isNaN也不太可靠dojo.lang.isUndefined判断输入与否为未定义,依照注释所说,此函数有也许会导致抛出异常,推荐使用typeof foo = undefined 来判断模块:dojo.lang.extrasdojo.lang.setTimeout延迟指定期间后执行指定办法Usage Example:function onTime(msg)dojo.d

32、ebug(msg)dojo.lang.setTimeout(onTime,1000,test);/1秒后会输出调试信息testdojo.lang.setTimeout(dojo,debug,1000,test);/1秒后会输出调试信息testdojo.lang.getNameInObj获得指定项目在指定对象中名称Usage Example:dojo.lang.getNameInObj(dojo,dojo.debug);/will return debugdojo.lang.shallowCopy返回指定对象浅表复制副本Usage Example:dojo.lang.shallowCopy();

33、/will return a 空对象dojo.lang.firstValued返回第一种存在定义参数Usage Example:var a;dojo.lang.firstValued(a,2,3);/will return 2/Dojo学习笔记(5. dojo.lang.array & dojo.lang.func & dojo.string.extras)模块:dojo.lang.arraydojo.lang.has判断对象与否具备指定属性,但是这个办法有用吗,不如直接使用 if(name in obj)Usage Example:dojo.lang.has(dojo.lang,has);/

34、will return truedojo.lang.isEmpty判断对象或数组与否为空Usage Example:dojo.lang.isEmpty(a:1);/will return falsedojo.lang.isEmpty();/will return truedojo.lang.map调用指定办法解决指定数组或字符串Usage Example:dojo.lang.map(1,2,3,4,5,function(x) return x * x;);/will return 1,4,9,16,25dojo.lang.forEach遍历指定数组或字符串,并对其中元素调用指定办法Usage

35、Example:dojo.lang.forEach(abc,function(x) alert(x););dojo.lang.every检查指定数组与否所有满足指定办法条件Usage Example:dojo.lang.every(1,-2,3,function(x) return x 0;);/指定数组不是全不不大于0,因而返回falsedojo.lang.some检查指定数组与否某些满足指定办法条件Usage Example:dojo.lang.some(1,-2,3,function(x) return x 0;);/指定数组有不不大于0元素,因而返回truedojo.lang.filt

36、er依照指定办法来过滤指定数组Usage Example:dojo.lang.filter(1,-2,3,function(x) return x 0;);/will return 1,3dojo.lang.unnest把指定参数或数组转换为一维数组Usage Example:dojo.lang.unnest(1,2,3);/will return 1,2,3dojo.lang.unnest(1,2,3,4);/will return 1,2,3,4dojo.lang.toArray将输入转换为数组Usage Example:function test()return dojo.lang.to

37、Array(arguments,1);test(1,2,3,4,5);/will return 2,3,4,5模块:dojo.lang.funcdojo.lang.hitch将指定办法挂在指定对象下并返回该办法Usage Example:func = test:function(s) alert(s);dojo.lang.mixin(func,demo:dojo.lang.hitch(func,test);func.demo(demo and test are same method);dojo.lang.forward返回自身对象指定名称办法引用Usage Example:func = te

38、st:function(s) alert(s),demo:dojo.lang.forward(test);func.demo(demo and test are same method);dojo.lang.curryWhat is curry?请参阅这篇文章:Usage Example:function add(a,b)return a + b;dojo.lang.curry(null,add,2,3);/will return 5dojo.lang.curry(null,add,2)(3);/will return 5dojo.lang.curry(null,add)(2)(3);/wil

39、l return 5dojo.lang.curry(null,add)()(2)(3);/will return 5dojo.lang.curryArguments与dojo.lang.curry类似,但是可以选取忽视掉前n个参数Usage Example:function add(a,b)return a + b;dojo.lang.curryArguments(null,add,1,2,3,4,5,2);/will return 5 (= 2 + 3)dojo.lang.tryThese测试参数指定所有函数,并返回第一种返回值不为0函数值from seno:dojo.lang.tryThe

40、se办法和prototype中Try.these()办法是同样,xmlNode.text在某些浏览器中好用,但是xmlNode.textContent在另某些浏览器中正常工作。使用Try.these()办法咱们可以得到正常工作那个办法返回值。function getXmlNodeValue(xmlNode)return Try.these(function() return xmlNode.text;,function() return xmlNode.textContent;);dojo.lang.delayThesefunction(/*Array*/farr,/*Function,opt

41、ional*/cb,/*Integer*/delay,/*Function,optional*/onend) 依照delay指定延迟,依次调用farr里面办法,如果指定了cb,则调用完办法后调用cb。当farr中所有办法都调用了之后,调用onend。模块:dojo.string.extrasdojo.string.substituteParams类似C#中String.Format函数%name要保证与传入对象名称大小写一致,否则会出异常Usage Example:dojo.string.substituteParams(%0 - %1 - %2,a,b,c);/will return a -

42、 b - cdojo.string.substituteParams(%name:%value,name:名称,value:值);/will return 名称:值dojo.string.capitalize把每一种单词首字母大写Usage Example:dojo.string.capitalize(show me love);/will return Show Me Lovedojo.string.isBlank判断输入字符串与否为空或全是空白字符,如果传入对象为非字符串则也会返回trueUsage Example:dojo.string.isBlank( 1 );/will return falsedojo.string.escape参数1为type,可传值为:xml/html/xhtml,sql,regexp/regex,javascript/jscript/js,ascii将按照所传type对字符串进行编码Usage Example:dojo.string.escape(html,);/will return dojo.string.encodeAsciidojo.string.escapeXmldojo.str

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服