我不是一个善于记笔记的人,虽然认为这是一个好的学习习惯。呵呵。
dojo官方文档还是相当全面的,感兴趣的可以去看看,http://www.dojotoolkit.org/, 我写这篇东西也不是为了对它作介绍,相信官方的文档和demo更有说服力,我只想记录我在学习dojo过程中对他的感觉。
我认为dojo对javascript的封装是侵入式的,举个简单的例子,要做一个button在dojo里要这样来做
<button dojoType="dijit.form.Button"></button>,注意dojoType,当然还有一种声明式的做法var btn = new dijit.form.Button('div_id')。不管怎么样,最终在页面上得到的,是dojo用模板替换后的html,类似ondijitclick:_onButtonClick,onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse。而且它预订了很多的css style,如果要想正常的显示出来,还必须要引入它预定义的css文件,当然这个我相信是可定制的。当然最后出来的效果还是不错了。dojo对javascript做了封装,类似button,input text, dialog等等。比如dijit.form.DateTextBox,是一个输入框,但是当鼠标点击在上面的时候,会弹出一个calendar,还是相当有趣的。而且它定义了layout。一般情况下在html上做layout,要么使用frame,table,div等等,而且做出来还不尽如人意,但是用dojo定义的一些layout,比如AccordinContainer,可以很简单的实现according效果,不仅如此,layout组件可以处理事件。谈到事件,dojo的connect机制还是相当令我兴奋的。比如对一个button,我们会这样写去处理事件<button onClick="function1"/>在function里我们可以做一些事。但是如果我们想出了function1做的事,还想做更多的事,而我们不愿意或者不能改变function1,该怎么办呢?dojo提供了connect,var handler = dojo.connect(btn,'onClick‘,function2);这个调用的意识当btn的onClick函数调用的时候也调用function2,准确的说应该是onClick调用后。这样当function1调用后,function2也会被调用,而且这个调用是不限次数的,可以connect更多的function,而相互之间不干扰。这个有点像java中的actionListener机制,凡是感兴趣的都可以去相应某个事件。还有一种事件处理机制publish/subscrib,这个我没有深入了解。这个有点类似jms中的topic。有另外一个js framework jmaki(它是建立在dojo之上的),都这种机制有更多的发挥。dojo有ajax机制,这个其他的js framework都有,而且都类似。dojo的data model也做的不错。这个在以后有机会再深入展开。dojox(dijit可以认识是在dojo base封装的widget,dojox是dojo扩展)的许多更能也非常炫,比如grid,charting。说实话我觉得grid做的很麻烦,样子也不好,这个要和data model一起说。dojox charting很炫。开发者可以用dojo很容易的做出pie,bar chart,而且有很多炫的效果。可惜似乎都ie8支持的不好。