笑着学习笔记Dojo入门

 

笑着-胖胖兰学习笔记Dojo入门

一,Dojo简介

Dojo是一个采用JS来实现的,封装了大量的常用功能的工具包,是一份DHTML ToolkitDojo采用了Ajax技术来实现客户端与服务器端的异步通信,从而实现无刷新页面情况下,客户端界面的快速反应。增强客户端界面的友好度。

 

二, Dojo的优点

第一,     提供了常用的功能的封装。

第二,     采用Ajax,从而具有了WEB2.0Ajax的优点,可以使客户端页面事件及时得到反映,使得客户在使用服务器端提供的服务的时候,就好像是在使用本地应用程序一样。

第三,     Dojo的书写风格更加的面向对象。我们可以采用类似Java,.Net的类的风格来学习,是用它。

 

三, 需要了解的几个概念

1. RIARich Interface Applications,富界面应用,俗称胖客户端)。RIA 具有的桌面应用程序的特点包括:在消息确认和格式编排方面提供互动用户界面;在无刷新页面之下提供快捷的界面响应时间;提供通用的用户界面特性如拖放式(drag and drop)以及在线和离线操作能力。

 

2. AjaxAsynchronous JavaScript and XML,异步JavaScriptXML),它是指一种创建交互式网页应用的网页开发技术。优点:异步处理,通信数据少;缺点:在动态更新页面的情况下,用户无法回到前一个页面状态。

 

3. DOMDocument Object Model,对象文档模型),它将网页中的各个元素都看作一个个对象,从而使网页中的元素也可以被计算机语言获取或者编辑。 例如Javascript就可以利用HTML DOM动态的修改网页。

 

4. JSONJavaScript Object Natation),它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互 )JSON 已经是 JavaScript 标准的一部分。目前,主流的浏览器对 JSON 支持都非常完善。应用 JSON,我们可以从 XML 的解析中摆脱出来,对那些应用 Ajax Web 2.0 网站来说,JSON 确实是目前最灵活的轻量级方案

 

 

四, Dojo常用包

Dojo 提供了上百个包,这些包分别放入三个一级命名空间:DojoDijit DojoX 。其中:

1Dojo 是核心功能包

2Dijit 中存放的是 Dojo 所有的Widget 组件,

3DojoX 则是一些扩展或试验功能,DojoX 中的试验功能在成熟之后有可能在后续版本中移入到 Dojo Dijit 命名空间中。

 

Dojo常用的包如下:

dojo.io           不同的IO传输方式。scriptIFrame等等;

   dojo.dnd          拖放功能的辅助API

   dojo.string       字符串处理(修整、转换为大写、编码、esacpe、填充(pad)等等);

   dojo.date         日期格式的解析;

   dojo.event        事件驱动的API,支持主题/队列的功能;

   dojo.back         用来撤销用户操作的栈管理器;

   dojo.rpc          后端服务(例如理解JSON语法的Web服务)通信;

   dojo.colors       颜色工具包;

   dojo.data         Dojo的统一数据访问接口,可以方便地读取XMLJSON 等不同格式的数据文件;

   dojo.fx           基本动画效果库;

   dojo.regexp       正则表达式处理函数库;

   dijit.forms       表单控件相关的Widget库;

   dijit.layout      页面布局Widget库;

   dijit.popup       以弹出窗口方式使用Widget

   dojox.charting    各种统计图表的工具包;

   dojox.collections 集合数据结构(ListQuerySetStackDictionary...);

   dojox.encoding    实现加密功能的APIBlowfishMD5RijndaelSHA...);

   dojox.math        数学函数(曲线、点、矩阵);

   dojo.reflect      提供反射功能的函数库;

   dojox.storage     将数据保存在本地存储中(例如,在浏览器中利用Flash的本地存储来实现);

   dojox.xml         XML解析工具包;

 

 

五, Dojo的使用

Dojo是采用JS来实现的,所以使用Dojo的时候,只要把dojo.js作为普通的js模块儿引入进来就可以了。另外,Dojo提供了djConfig对象来控制自己的一些基本的行为。基本使用原则如下:

1.  djConfig对象定义到一个单独的js文件中(当然也可以直接写到htmljsp中,跟普通的js对象没有不同)以下为djConfig的默认设定

<script type="text/javascript">

var djConfig = {

IsDebug: false,

debugContainerId: "",

bindEncoding: "",

allowQueryConfig: false,

baseScriptUri: "",

parseWidgets: true

searchIds: [],

baseRelativePath: "",

libraryScriptUri: "",

iePreventClobber: false,

ieClobberMinimal: true,

preventBackButtonFix: true,

};

</script>

2.  在开发中,首先引用djConfig的定义文件

3.  引入dojo

<script type="text/javascript" src="/yourpath/dojo.js" />

4.  声明需要使用到的包

<script type="text/javascript">

     dojo.require("dojo.math");

     dojo.require("dojo.io.*");

     dojo.require("dojo.widget.*");

</script>

 

5.  使用dojo提供的功能

dojo.io.argsFromMap({a:1,b:2,c:3}); //will return "c=3&b=2&a=1"

6.  通过dojo.query()来处理Dom等等

7.  使用dojo.addOnLoad()来指定网页初始化时的动作

dojo.addOnLoad(init); //init 是一个函数

dojo.addOnLoad(myObject, init); //init myObject 对象的一个方法

 

六, 与服务器交互

dojo.io.bind({

url: "http://localhost/test.html", //要请求的页面地址

mimetype: "text/html", //请求的页面的类型,应该设置为与你请求页面类型对应的

mimetype,默认为 "text/plain"

method"GET", //默认为"GET"

sync: false, //默认为异步执行

useCache: false, //默认为不使用页面缓存,注意这里的缓存并不是浏览器的缓存,而是Dojo自身所维护的页面缓存

preventCache: false, //默认为启用浏览器缓存,否则将通过自动增加不同的参数来确保浏览器缓存失效

timeoutSeconds: 3000, //3 秒后超时,如果为0 则永不超时

load: function(type, data, evt) { alert(data); }, //type should be "load", data is that we wanted

error: function(type, error) { alert(error.message); }, //error is dojo.io.Error

timeout: function(type) { alert("请求超时!"); }

});

 

七, 事件处理

常用的事件处理(诸如button.onclick())只能绑定一个处理函数,而且解绑的方式比较不太合理

dojo的事件处理

      绑定事件处理函数:

      (/*Handle*/)dojo.connect = function(/*Object|null*/ obj,

                              /*String*/ event,

                              /*Object|null*/ context,

                              /*String|Function*/ method,

                              /*Boolean*/ dontFix)

      解绑:dojo.disconnect = function(/*Handle*/ handle)

事件处理例子:

function $(id) { return document.getElementById(id); }

 function handler(eventObj) {

     console.info("eventType=" + eventObj.type + "; node="

                 + eventObj.target.id + "; currentTarget=" + eventObj.currentTarget.id);

 }

 function handler2(eventObj) { console.info("this is for test"); }

 function connect() {

     dojo.connect($("book"), "click" , handler);

     dojo.connect($("cpp"), "click" , handler);

     dojo.connect($("b1"), "mouseover" , handler);

     dojo.connect($("b1"), "mousedown" , handler);

     dojo.connect($("b1"), "click" , handler);

     dojo.connect($("b2"), "click" , handler);

     dojo.connect($("b2"), "click" , handler2);

     dojo.connect($("b3"), "click" , handler);

 }

 dojo.addOnLoad(connect);

 </script>

 <div id="book">

 <ol id="cpp">

          <li id="b1">C++ primer</li>

          <li id="b2">Thinking in C++</li>

          <li id="b3">Inside C++ object model</li>

 </ol>

 </div>

 

 

 

 

 

 

 

用户自定义事件处理例子:

   户自定义事件是指用户指定的函数被调用时触发的“事件”,

   当指定函数被调用时,将促发监听函数被调用。

  <script type="text/javascript">

    function print(fName, args) {

       var message = "In " + fName + "; the arguments are: "

       dojo.forEach(args, function(args) {

          message += args.toString() + " ";

       }) ;

       console.log(message);

    }

    function handler1() { print("handler1", arguments); }

    function handler2(a1, a2) { print("handler2", [a1, a2]); }

    function userFunction() { print("userFunction", arguments); }

    dojo.connect("userFunction", null, "handler1");

    dojo.connect("userFunction", null, "handler2");

    userFunction(1, 2);

  </script>

 

八, 开发自己的Dojo程序模块儿

1.  使用dojo.provide("myNameSpace.myPackage");来声明模块儿

2.  使用dojo.resgisterModulePath(“myNameSpace”, “"../../path”)来引用模块儿

ppl.js文件  一般文件名与package名相同,namespace一般与文件某一父目录名相同。是否必须没有试验过。

 

dojo.provide("xz.ppl");

dojo.require("dojo.date.locale");

 

xz.ppl = {//xzNameSpace  pplpackage

        lengthType : {CHAR : 1, BYTE : 2},

        checkPPL : function(checkElement, errorMessage) {

        }

}

 

ppl.html

 

dojo.registerModulePath("xz", "../../xzpath");

dojo.require("xz.ppl");

 

九, Dojo API

    http://api.dojotoolkit.org/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值