1. dojo.hitch(this,myHash.enclosedFunction); 更改myHash中enclosedFunction
方法的上下文,变为global,本身的就不可访问了 2.声明类 类的声明需要三个对象: 一个惟一的类名 用于扩展
函数的
父类(以及模拟多个继承的 “混合” 类) 定义所有
属性和
函数的 hash dojo.declare( "myClass",null,{} ); 3.构造
函数 dojo.declare( "myClass",{ arg1 : "",constructor : function(arg1,arg2) { this.arg1 = arg1; },myMethod : function() { console.log(this.arg1 + "," + this.arg2); } } ); 4.复杂的
属性规则 类
属性可以在声明时进行初始化,但是如果使用复杂对象类型(例如 hash 或数组)初始化
属性,该
属性将类似于 Java 类中的公共静态变量。这意味着任何实例无论在何时更新它 ,
修改将反映到所有其他实例中。为了避免这个问题,应当在构造
函数中初始化复杂
属性;然而,对于字符串、布尔值等简单
属性则不需要这样做。 dojo.declare( "myClass",{ globalComplexArg : { val : "foo" },localComplexArg : null,constructor : function() { this.localComplexArg = { val:"bar" }; } } ); 这里globalComplexArg是公共的,对她的
修改会反映到所有的实例 localComplexArg则不是 5.覆盖
方法 在dojo(js)中,没有重载,在子类中的与
父类同名的
方法,可以使用this.inherited(arguments);来
调用父类方法 6.dojo.addOnLoad(function); 可以代替<body onload="function"> 或 window.onload=function; 7.dojo.connect(); 监听普通的DOM事件 8.使用xmlHttp时的编码格式的
修改: <script type="text/javascript" src="js/dojo.js" djConfig="isDebug:true,bindEncoding:'UTF-8'"></script> 9.发送xmlHttp请求: function sayHello(){ dojo.xhrGet({ url: "http://localhost/hello/sayHello.jsp",handleAs: text,load: function(responseText){ alert(responseText); dojo.byId("hello").innerHTML = responseText; },error: function(response){ alert("Error"); } }); } 传入参数: var params = { username: 'Mark',id: '105' } dojo.xhrGet({ url: '',content: params,... }); 如果是post,使用dojo.xhrPost,还有dojo.xhrPut,dojo.xhrDelete 获得的数据类型,选其他,如json,只要把handleAs: 'json' 就行了,xml 就 handleAs: 'xml' 想要直接提交表单: dojo.xhrGet({ url: '',form: dojo.byId('form1'),... }); 10.其他有用
方法: dojo.query,dojo.forEach,dojo.margin
Box,dojo.content
Box 11.package机制: 用到了: dojo.require,dojo的顶层目录,就是dojo.js的上一层, 比如dojo.js是"project/dojo-lib/dojo/dojo.js",那么"project/dojo-lib/就是顶层 假设要引入project/dojo-lib/dojo/string.js,那么就使用 dojo.require("dojo.string"),要引入project/dojo-lib/dojox/dtl/_base.js,则这样:dojo.require("dojox.dtl._base"); dojo.provide dojo.registerMoudlePath 12.操作DOM dojo.query().用来处理文档对象模型(DOM) dojo.require("dojo.NodeList-fx"); dojo.addOnLoad(function(){ // our dom is ready,get the node: dojo.query("#testHeading") // add "testClass" to its class="" attribute .addClass("testClass") // and fade it out after 500 ms .fadeOut({ delay:500 }).play(); }); dojo.query()返回一个dojo.NodeList的实例,这是一个dom 的节点数组 13.基本动画: 包含在dojo.js 中的动画
效果:fadeIn,fadeOut和 animateProperty. dojo.animateProperty是更多高级动画的基础。 14.dojo.io.bind 作为Ajax请求的一种发送方式,与上面的dojo.xhrXXX不同,bind使用dojo.io.Request定义参数,dojo.io.Transpot定义通讯
方法 dojo.io.bind({ url: '',mimetype: '',//default text/plain method: '',//default GET sync: false,//default 异步 useCache: false,//default 不使用,这里不是浏览器缓存,而是dojo所维护的
页面缓存 preventCache: false,//default 启用浏览器缓存 timeoutSeconds:,load: function(type,data,evt),//type should be load error: function(type,error) // error is dojo.io.Error timeout: function(type) }); 也可以用handle来处理所有事件,通过type来区分事件 如果没有指定transport,dojo会在
注册的transport中寻找 transpot: 'XMLHTTPTransport',bind还可以得到一个JavaScript对象,url: 'test.js',mimetype: 'text/javascript' (应该与请求url对应) POST时,参数或form绑定 formNode: dojo.byId('form1'),content: {a:1,b:2},这与xhrPOST是一样的 一次发多个网页请求时,使用dojo.io.queneBind,
用法与bind一样 15.dojo.io.argsFromMap({a:1,b:2,c:3}); //will return "c=3&b=2&a=1" dojo.io.argsFromMap({name:&name,value:&value},"utf","value") // "utf" 指定了编码格式如果有
中文的话,最好指定,最后一个参数value指定了结果出现的最后一个参数 上面return name={name}&value={value} 16.dojo.io.setIFrameSrc(dojo.byId('id'),url) 设置iframe的src 17.dojo.lang 包 dojo.lang.isEmpty(array) 数据是否为空 dojo.lang.map(array,func(x)) 以指定的
方法处理数组,x为数组每个元素 dojo.lang.foreach(array/string,func(x)) 遍历数组或字符串,并
调用方法 dojo.lang.every(array,func(x)) 遍历数组,判断数组元素是否满足要求