dojo学习笔记(一)

1. dojo.hitch(this, myHash.enclosedFunction);
更改myHash中enclosedFunction方法的上下文,变为global,本身的就不可访问了

2.声明类
类的声明需要三个对象:
一个惟一的类名
用于扩展函数的父类(以及模拟多个继承的 “混合” 类)
定义所有属性和函数的 hash
dojo.declare(
   "myClass",
   null,
   {}
);

3.构造函数
dojo.declare(
    "myClass",
    null,
    {
        arg1 : "",
        constructor : function(arg1, arg2) {
                          this.arg1 = arg1;
                      },
        myMethod : function() {
                       console.log(this.arg1 + "," + this.arg2);
                   }
    }
);

4.复杂的属性规则

类属性可以在声明时进行初始化,但是如果使用复杂对象类型(例如 hash 或数组)初始化属性,该属性将类似于 Java 类中的公共静态变量。这意味着任何实例无论在何时更新它
,修改将反映到所有其他实例中。为了避免这个问题,应当在构造函数中初始化复杂属性;然而,对于字符串、布尔值等简单属性则不需要这样做。

dojo.declare(
    "myClass",
    null,
    {
        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.marginBox, dojo.contentBox

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))   遍历数组,判断数组元素是否满足要求

你可能感兴趣的:(JavaScript,json,Ajax,浏览器,dojo)