`

Dojo学习笔记(三)(转)

    博客分类:
  • AJAX
阅读更多

Usage Example:
function onTime(msg){dojo.debug(msg)}dojo.lang.setTimeout(onTime, 1000, "test"); //1秒后会输出调试信息"test"dojo.lang.setTimeout(dojo, "debug", 1000, "test"); //1秒后会输出调试信息"test"
dojo.lang.getNameInObj
获得指定项目在指定对象中的名称
Usage Example:
dojo.lang.getNameInObj(dojo, dojo.debug);      //will return "debug"
dojo.lang.shallowCopy
返回指定对象的浅表复制副本
Usage Example:
dojo.lang.shallowCopy({});    //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.array

dojo.lang.has
判断对象是否具有指定属性,不过这个方法有用吗,不如直接使用 if(name in obj)
Usage Example:
  dojo.lang.has(dojo.lang, "has"); //will return true

dojo.lang.isEmpty
判断对象或数组是否为空
Usage Example:
  dojo.lang.isEmpty({a: 1}); //will return false
  dojo.lang.isEmpty([]); //will return true

dojo.lang.map
调用指定的方法处理指定的数组或字符串
Usage Example:
  dojo.lang.map([1,2,3,4,5], function(x) { return x * x;}); //will return [1,4,9,16,25]

dojo.lang.forEach
遍历指定的数组或字符串,并对其中的元素调用指定的方法
Usage 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的,因此返回false

dojo.lang.some
检查指定的数组是否部分满足指定方法的条件
Usage Example:
  dojo.lang.some([1,-2,3], function(x) { return x > 0; }); //指定的数组有大于0的元素,因此返回true

dojo.lang.filter
根据指定的方法来过滤指定的数组
Usage Example:
  dojo.lang.filter([1,-2,3], function(x) { return x > 0; }); //will return [1, 3]

dojo.lang.unnest
把指定的参数或数组转换为一维数组
Usage Example:
  dojo.lang.unnest(1, 2, 3);  //will return [1, 2, 3]
  dojo.lang.unnest(1, [2, [3], [[[4]]]]); //will return [1, 2, 3, 4]

dojo.lang.toArray
将输入转换为数组
Usage Example:
  function test()
  {
    return dojo.lang.toArray(arguments, 1);
  }
  test(1,2,3,4,5); //will return [2,3,4,5]

模块:dojo.lang.func
dojo.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 = {test: function(s) {alert(s)}, demo: dojo.lang.forward("test")};
  func.demo("demo and test are same method");

dojo.lang.curry
What is curry? 请参阅这篇文章:http://www.svendtofte.com/code/curried_javascript/
Usage Example:
  function add(a, b)
  {
    return a + b;
  }
  dojo.lang.curry(null, add, 2, 3); //will return 5
  dojo.lang.curry(null, add, 2)(3); //will return 5

/***********************************************************************************************************/

dojo.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的函数值,没看懂这个函数哪里用得着
dojo.lang.delayThese
没看懂这个函数怎么用

模块:dojo.string.extras

dojo.string.substituteParams
类似C#中的String.Format函数
%{name}要保证与传入的对象的名称大小写一致,否则会出异常
Usage Example:
  dojo.string.substituteParams("%{0} - %{1} - %{2}", "a", "b", "c"); //will return "a - b - c"
  dojo.string.substituteParams("%{name}: %{value}", {name:"名称",value:"值"}); //will return "名称: 值"

dojo.string.capitalize
把每一个单词的首字母大写
Usage Example:
  dojo.string.capitalize("show me love"); //will return "Show Me Love"

dojo.string.isBlank
判断输入字符串是否为空或全是空白字符,如果传入对象为非字符串则也会返回true
Usage Example:
  dojo.string.isBlank("   1   "); //will return false

dojo.string.escape
参数1为type,可传值为: xml/html/xhtml, sql, regexp/regex, javascript/jscript/js, ascii
将按照所传type对字符串进行编码
Usage Example:
  dojo.string.escape("html", ""); //will return " type='text' value='' />"

dojo.string.encodeAscii
dojo.string.escapeXml
dojo.string.escapeSql
dojo.string.escapeRegExp
dojo.string.escapeJavaScript
dojo.string.escapeString
这些函数也就是 dojo.string.escape 所调用的,这里无需多说

dojo.string.summary
取得输入字符串的缩略版本
Usage Example:
  dojo.string.summary("1234567890", 5); //will return "12345..."

dojo.string.endsWith
判断输入字符串是否以指定的字符串结尾
Usage Example:
  dojo.string.endsWith("abcde", "E");  //will return false
  dojo.string.endsWith("abcde", "E", true); //will return true

dojo.string.endsWithAny
判断输入字符串是否以指定的任意字符串结尾
Usage Example:
  dojo.string.endsWithAny("abcde", "E", "e"); //will return true

dojo.string.startsWith
判断输入字符串是否以指定的字符串开头
Usage Example:
  dojo.string.startsWith("abcde", "A");  //will return false
  dojo.string.startsWith("abcde", "A", true); //will return true

dojo.string.startsWithAny
判断输入字符串是否以指定的任意字符串开头
Usage Example:
  dojo.string.startsWithAny("abcde", "A", "a"); //will return true

dojo.string.has
判断输入字符串是否含有任意指定的字符串
Usage Example:
  dojo.string.has("abcde", "1", "23", "abc"); //will return true

dojo.string.normalizeNewlines
按要求转换回车换行的格式
Usage Example:
  dojo.string.normalizeNewlines("a\r\nb\r\n", "\r"); //will return "a\rb\r"

dojo.string.splitEscaped
将字符串按分隔符转换为数组
Usage Example:
  dojo.string.splitEscaped("a\\_b_c", '_'); //will return ["a\\_b", "c"] 

//*****************************************************************************************************************
Dojo学习笔记(6. dojo.io.IO & dojo.io.BrowserIO)  

模块:dojo.io.IO

dojo.io.bind


处理请求取回需要的数据并处理

 

这个函数是AJAX中最为重要和有用的函数,dojo.io.bind这个类是用来处理客户端与服务器间通讯的,需要通讯的参数由对象dojo.io.Request所定义,具体通讯的方法则由另外一个对象Transport所提供。

 

因此,我们如果需要与服务器通讯,则应该定义一个Request对象,其中包括服务器地址及回调函数,例子中Requset都是以匿名对象方式定义的


虽然我们可以定义一个自己的Transport,但是显然不如直接利用现成的Transport方便。


Dojo里提供了一个同时兼容IE和Firefox的dojo.io.XMLHTTPTransport,但是这个对象位于dojo.io.BrowserIO,因此,一般require dojo.io.IO时,还应该require dojo.io.BrowserIO

 

Usage Example:

  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("请求超时!"); }
  });


  你也可以用一个handle来处理所有的事件

 

  dojo.io.bind({
    url: "http://localhost/test.html", //要请求的页面地址
    mimetype: "text/html", //请求的页面的类型,应该设置为与你请求页面类型对应的mimetype
    timeoutSeconds: 3000,  //3秒后超时,如果为0则永不超时
    handle: function(type, data, evt){
      if(type == "load") { alert(data); } //data is that we wanted
      else if (type == "error") { alert(data.message); } //data is the error object
      else { ; } //other events maybe need handled
    }
  });
  
  如果没有在Request中指定所用的transport,则Dojo会自动的在已注册的transports中寻找能够处理这个Request的transport,如果不能找到,则返回指定的Request。下面是一个指定了transport的例子:


  dojo.io.bind({
    url: "http://localhost/test.html", //要请求的页面地址
    mimetype: "text/html", //请求的页面的类型,应该设置为与你请求页面类型对应的mimetype
    timeoutSeconds: 3000,  //3秒后超时,如果为0则永不超时
    transport: "XMLHTTPTransport",

    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("请求超时!"); }
  });


  你还可以利用bind来得到一个JavaScript所定义的对象(注意mimetype必须要定义为"text/javascript")

 

  testObj = dojo.io.bind({
    url: "http://localhost/test.js", //test.js里定义了一个对象
    mimetype: "text/javascript", //请求的页面的类型,应该设置为与你请求页面类型对应的mimetype
    timeoutSeconds: 3000,  //3秒后超时,如果为0则永不超时 

<cc></cc>    handle: function(type, data, evt){
      if(type == "load") { alert(data); } //data is a object or value
      else if (type == "error") { alert(data.message); } //data is the error object
      else { ; } //other events maybe need handled
    }
  });
  
  下面是一个Post的例子:
  
  dojo.io.bind({
    url: "http://localhost/test.aspx", //要提交的页面地址
    mimetype: "text/html", //请求的页面的类型,应该设置为与你请求页面类型对应的mimetype
    timeoutSeconds: 3000,  //3秒后超时,如果为0则永不超时
    method: "POST",
    formNode: dojo.byId("myForm"), //指定提交的Form名称

    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("请求超时!"); }
  });

 

  另一个Post的例子(without Form to post):


  dojo.io.bind({
    url: "http://localhost/test.aspx", //要提交的页面地址
    mimetype: "text/html", //请求的页面的类型,应该设置为与你请求页面类型对应的mimetype
    timeoutSeconds: 3000,  //3秒后超时,如果为0则永不超时
    method: "POST",
    content: {a: 1, b: 2}, //要提交的数据

    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("请求超时!"); }
  });


 

dojo.io.queueBind


  有时,我们需要一次发出多个网页请求,则应该使用dojo.io.queueBind,因为浏览器可能只允许同时发出有限个数的请求,如果是使用dojo.io.bind的话,则有可能会申请不到新的XMLHttp对象而导致出错。

  用法与dojo.io.bind是一样的。


 

dojo.io.argsFromMap


  用来把对象转换为URL的参数形式
  
Usage Example:


  dojo.io.argsFromMap({a:1,b:2,c:3}); //will return "c=3&b=2&a=1"
  dojo.io.argsFromMap({name:"名称",value:"值"},"utf"); //will return "value=%E5%80%BC&name=%E5%90%8D%E7%A7%B0", 有中文的话应该指定utf格式,否则dojo.string.encodeAscii返回的编码是很怪异的
  dojo.io.argsFromMap({a:1,b:2,c:3}, "utf", "c"); //will return "b=2&a=1&c=3",最后一个参数可以控制指定名称的值出现在最后
  

 

dojo.io.setIFrameSrc


  设置IFrame的Src
  
Usage Example:

 

  dojo.io.setIFrameSrc(dojo.byId("myFrame"), "http://localhost/test.htm"); //myFrame打开指定的网页
  dojo.io.setIFrameSrc(dojo.byId("myFrame"), "http://localhost/test.htm", true); //myFrame打开指定的网页,并覆盖浏览器的历史记录


 

TODO: 补充一个kwArgs的例子,我之前在网上看见过,可是现在无论如何也找不到相关的页面了,只好以后在举例了

 


模块:dojo.io.BrowserIO

 

基本上就提供了dojo.io.XMLHTTPTransport这个对象


XMLHTTPTransport一般能够满足我们的需求,但是其有几个限制:它不能传输文件,不能够成功执行跨域名的远程请求,并且不支持 file:// 这样的协议


因此,根据应用要求,我们可能会需要选用其它的transport: dojo.io.IframeTransport, dojo.io.repubsubTranport, dojo.io.ScriptSrcTransport, ShortBusTransport

 

dojo.io.IframeTransport,用法与xmlhttp是一样的,其优点就是可以跨域,不存在任何的安全问题
如果Request指定的mimetype是text或javascript,返回的内容应该是放在第一个textarea里的内容,如果指定的mimetype是html,则IFrame里的html则是需要的内容。因为浏览器兼容的原因,IframeTransport不能正确处理返回类型为XML的请求。 

 

关于Rpc,这个类似于Remoting的东西,也将在以后对其进行介绍。

 

分享到:
评论

相关推荐

    DOJO 学习笔记 dojo

    Dojo 是一个功能丰富的 JavaScript 库,它提供了一系列模块化、面向对象的工具,用于构建高性能的 Web 应用程序。在 Dojo 中,模块和包...通过深入学习和理解这些模块和包,开发者可以构建高效、健壮的 Web 应用程序。

    dojo学习笔记

    Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,包括AJAX、DOM操作、动画...在“dojo学习笔记”中,你可能找到了关于这些概念的详细讲解和实践案例,这对理解和掌握Dojo技术体系非常有帮助。

    dojo精品中文教程(全)

    dojo学习笔记(三) dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane dojo学习笔记(四) dojo的拖拽示例以及疑问! 介绍dojo事件 使用 Dojo ...

    dojo精品中文教程(包一)

    dojo学习笔记(三) dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane dojo学习笔记(四) dojo的拖拽示例以及疑问! 介绍dojo事件 使用 Dojo ...

    dojo精品中文教程(包二)

    dojo学习笔记(三) dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane dojo学习笔记(四) dojo的拖拽示例以及疑问! 介绍dojo事件 使用 Dojo ...

    dojo精品中文教程(包三)

    dojo学习笔记(三) dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane dojo学习笔记(四) dojo的拖拽示例以及疑问! 介绍dojo事件 使用 Dojo ...

    dojo学习笔记(web编程必备)

    【Dojo 学习笔记】 Dojo 是一个强大的JavaScript工具库,特别适合于Web编程,尤其在面向对象的JavaScript编程方面表现出色。学习Dojo之前,建议先掌握JavaScript的面向对象编程基础,这对于理解Dojo的源码和设计...

    dojo 学习笔记 表单 树形列表

    基本的表单验证 和前一个树形菜单 ...发现很多 dojo 学者想下载 dojo 的API…… 结论是:下不到的! 发现很多想下载一些帮助例子,在http://download.dojotoolkit.org/ 下才能找到,进去点版本,比如 ...

    dojo源文件+学习笔记

    这个压缩包包含了Dojo的源代码和相关学习笔记,旨在帮助开发者深入理解Dojo的工作原理和使用方法。 1. **Dojo 源代码解析**: Dojo 的源代码是用JavaScript编写的,并遵循AMD(Asynchronous Module Definition)...

    Dojo简单笔记和权威学习去处

    首先,"dojo文档.doc"可能是作者整理的个人学习笔记,通常这样的文档会包含对Dojo核心概念的理解、常用函数和方法的解释、实例代码以及可能遇到的问题解决方案。个人笔记是学习过程中宝贵的经验总结,可以帮助快速...

    Dojo 教程 笔记 (转载)

    【Dojo 教程笔记】 Dojo 是一个强大的JavaScript工具库,它采用了面向对象的编程方式,对于熟悉JavaScript面向对象编程的开发者来说尤其有用。在开始学习Dojo之前,建议先掌握JavaScript的基础知识,特别是面向对象...

    推荐dojo学习笔记

    ### Dojo框架学习笔记 #### 一、Dojo框架简介 Dojo是一个开源的JavaScript库,主要用于构建高性能的Web应用程序。它提供了一系列的功能强大的工具,包括DOM操作、AJAX、事件处理、用户界面控件等,使开发者能够...

    Dojo 学习笔记入门篇 First Dojo Example

    《Dojo 学习笔记入门篇 - 首个Dojo示例解析》 Dojo是一个功能强大的JavaScript工具包,它提供了丰富的UI组件、模块化系统、数据存储以及Ajax等功能,广泛应用于Web开发中。本篇文章将引导你完成Dojo的基础配置,并...

    Dojo的一些学习资料

    在"dojo学习笔记.pdf"中,你可能会学习到如何导入Dojo,如何使用模块系统,以及一些基本的Dojo API。"Dojo快速入门.pdf"可能会介绍Dojo的安装、配置过程,快速上手的方法,以及Dijit组件的初步使用。最后,"dojo组件...

Global site tag (gtag.js) - Google Analytics