??xml version="1.0" encoding="utf-8" standalone="yes"?>成人精品一区二区三区免费,av片在线看,性xxxxfreexxxxx欧美丶http://www.aygfsteel.com/terrywu/category/22528.htmlzh-cnSun, 27 May 2007 10:02:19 GMTSun, 27 May 2007 10:02:19 GMT60Dojo学习(fn)W记(9. dojo.graphics.color & dojo.uri.Uri)http://www.aygfsteel.com/terrywu/articles/119994.htmlTNTTNTFri, 25 May 2007 06:07:00 GMThttp://www.aygfsteel.com/terrywu/articles/119994.htmlhttp://www.aygfsteel.com/terrywu/comments/119994.htmlhttp://www.aygfsteel.com/terrywu/articles/119994.html#Feedback0http://www.aygfsteel.com/terrywu/comments/commentRss/119994.htmlhttp://www.aygfsteel.com/terrywu/services/trackbacks/119994.htmlDojo学习(fn)W记(9. dojo.graphics.color & dojo.uri.Uri)

Dojo学习(fn)W记(9. dojo.graphics.color & dojo.uri.Uri)


模块Qdojo.graphics.color


下面是dojo里定义的颜色名称
dojo.graphics.color.named.white //白色
dojo.graphics.color.named.black //黑色
dojo.graphics.color.named.red //U色
dojo.graphics.color.named.green //l色
dojo.graphics.color.named.blue //蓝色
dojo.graphics.color.named.navy //军?br>dojo.graphics.color.named.gray //灰色
dojo.graphics.color.named.silver//银色


dojo.graphics.color.Color

颜色c?/p>


Usage Example:


var color = new dojo.graphics.color.Color(dojo.graphics.color.named.black); //定义一个黑色的颜色对象
var color = new dojo.graphics.color.Color(0,0,0); //定义一个黑色的颜色对象
var color = new dojo.graphics.color.Color(0,0,0,1.0); //定义一个黑色的颜色对象
var color = new dojo.graphics.color.Color([0,0,0,1.0]); //定义一个黑色的颜色对象
var color = new dojo.graphics.color.Color('rgb(0,0,0)'); //定义一个黑色的颜色对象
var color = new dojo.graphics.color.Color('#000000'); //定义一个黑色的颜色对象



dojo.graphics.color.Color.toRgb


Usage Example:


color.toRgb();  //q回一个[0,0,0]的数l?br>color.toRgb(true); //q回一个[0,0,0,1.0]的数l?/p>



dojo.graphics.color.Color.toRgba


Usage Example:


color.toRgba();  //q回一个[0,0,0,1.0]的数l?/p>



dojo.graphics.color.Color.toHex
dojo.graphics.color.Color.toString


Usage Example:


color.toHex();  //q回"#000000"
color.toString(); //q回"#000000"



dojo.graphics.color.Color.toCss


Usage Example:


color.toCss();  //q回"rgb(0,0,0)"



dojo.graphics.color.Color.blend


混合另一个颜色得C个新颜色


Usage Example:

color.blend('#ffffff', 1); //q回[255,255,255]
color.blend('#ffffff', -1); //q回[0,0,0]
color.blend('#ffffff', 0); //??混合黑色和白Ԍq回[127,127,127]
颜色参数可以为颜色的L形式Q比如数l,字符串等


or


dojo.graphics.color.blend([0,0,0], [255,255,255], 0); //will return [127,127,127]
dojo.graphics.color.blend("#000000", "#ffffff", 0); //will return "#7f7f7f"
若第一个参Cؓ(f)字符Ԍ则返回g?x)返回字W串



dojo.graphics.color.Color.blendHex


Usage Example:


dojo.graphics.color.blendHex("#000000", "#ffffff", 0); //will return "#7f7f7f"



dojo.graphics.color.extractRGB


输入{换ؓ(f)RGB数组


dojo.graphics.color.hex2rgb


输入的字符串{换ؓ(f)RGB数组


dojo.graphics.color.rgb2hex


输入的RGB数组转换为字W串



dojo.graphics.color.Color.fromArray


Usage Example:


var color = dojo.graphics.color.Color.fromArray([0,0,0,1.0]);



模块Qdojo.uri.Uri


dojo.uri.Uri


专门用来处理URI(l一资源标识W?的类


Usage Example:


uri = (new dojo.uri.Uri("http://myserver/dojo/", "guide.html")).toString(); //uri will be "http://myserver/dojo/guide.html"
uri = (new dojo.uri.Uri("http://myserver/dojo/", "../guide.html")).toString(); //uri will be "http://myserver/guide.html"


RFC规定的URI语法Q[scheme:][//authority][path][?query][#fragment]
authority语法Q[user-info@]host[:port]


比如我们定义一个uri

var uri = new dojo.uri.Uri("http://user:password@myserver:80/dojo/", "guide.html?page=1#top");


则uri的属性如下:(x)


authority: 服务器名 "user:password@myserver:80"
fragment: 片断?"top"
host: L?"myserver"
password: 密码 "password"
path: 路径 "/dojo/guide.html"
port: 端口 80
query: 参数 "page=1"
scheme: 模式 "http"
uri: 完整的地址 "http://user:password@myserver:80/dojo/guide.html?page=1"
user: 用户?"user:" g有点问题Q多?jin)一个冒?/p>

TNT 2007-05-25 14:07 发表评论
]]>
Dojo学习(fn)W记(8. dojo.event & dojo.event.topic & dojo.event.browser)http://www.aygfsteel.com/terrywu/articles/119993.htmlTNTTNTFri, 25 May 2007 06:06:00 GMThttp://www.aygfsteel.com/terrywu/articles/119993.htmlhttp://www.aygfsteel.com/terrywu/comments/119993.htmlhttp://www.aygfsteel.com/terrywu/articles/119993.html#Feedback0http://www.aygfsteel.com/terrywu/comments/commentRss/119993.htmlhttp://www.aygfsteel.com/terrywu/services/trackbacks/119993.htmlDojo学习(fn)W记(8. dojo.event & dojo.event.topic & dojo.event.browser)

Dojo学习(fn)W记(8. dojo.event & dojo.event.topic & dojo.event.browser)

模块Qdojo.event

l于q入有名的dojo事g处理pȝ的学?fn)?jin)Q学?fn)前读者先去补?fn)一下AOP的相关知?/p>

dojo.event.connect

l定指定的方法到指定的对象的Ҏ(gu)?/p>

Usage Example:

单绑?

function doOnClick1()
{
 alert("Clicked!");
}
dojo.event.connect(dojo.byId("inputTest"),"onclick","doOnClick1");

单绑?

obj = { doOnClick2: function(){ alert("Clicked!");}}
dojo.event.connect(dojo.byId("inputTest"),"onclick",obj,"doOnClick2");

如果存在需要进行多个事件的l定的时候,你就?x)看到dojo的方便之处了(jin)

obj2 = { doOnClick2: function(){alert("Clicked!");}}
dojo.event.connect(dojo.byId("inputTest"),"onclick",obj,"doOnClick2");
dojo.event.connect(dojo.byId("inputTest"),"onclick",obj2,"doOnClick2");

connect可以对Q何对象的Ҏ(gu)q行l定Q而不是只能针对DOM对象

dojo.event.connect(obj,"doOnclick2","doOnClick1"); //在调用obj.doOnclick2()后调用doOnClick1()


dojo.event.connectBefore

dojo.event.connect默认是后l定QconnectBefore则是早绑定,l定的方法将在指定方法前执行Q用法与connect一?/p>


dojo.event.connectAround

Usage Example:

function aroundTest(invocation){
  //此处可以增加代码Q比如检查参?invocation.args)
  var result = invocation.proceed();
  //此处可以增加代码Q比如修改结?result)
  return result;
}
dojo.event.connectAround(dojo.byId("inputTest"),"onclick","aroundTest");


dojo.event.connectOnce
说vq个函数Q还真的是让我想?jin)半天,直觉上我把它想象成executeOnceQ结果测试的l果让我差点想不?br>connectOnce是指保证只l定一ơ,来避免重复绑定会(x)D的重复执行的问题


dojo.event.disconnect

解除l定Q调用参Cconnect一_(d)卛_解除之前的绑定操?/p>


dojo.event.log

在执行指定对象的指定Ҏ(gu)后自动记录日?/p>

Usage Example:

dojo.event.log(obj, "doOnClick"); //当调用obj.doOnClick时记录下日志"DEBUG:  ([object Object]).doOnClick : "

你也可以q样写:(x)

dojo.event.log({srcObj: obj, srcFunc: "doOnClick"});


dojo.event.kwConnect

kwConnect可以做到更加灉|的绑定,比如可以讄延迟执行l定

Usage Example:

dojo.event.kwConnect({
  srcObj: dojo.byId("inputTest"),
  srcFunc: "onclick",
  adviceObj: obj,
  adviceFunc: "doOnclick2",

  type: "before", //默认?after"Q可? "before", "around"Q注意:(x)type是用来决定adviceFunc的行为的Q如果ؓ(f)"around"Q则aroundFunc失?br>  aroundObj: null,
  aroundFunc: null, //如果指定?jin)aroundFuncQ则其将对adviceFuncq行拦截Q但是当type?around"Ӟ则aroundFunc不?x)执?br>  once: false, //默认为falseQ允?dng)R复绑?br>  delay: 3000, //延时3U后执行adviceFunc
  rate: 0, //q个从源代码没有看懂起什么作?br>  adviceMsg: false //q个从源代码没有看懂起什么作?br>});


dojo.event.kwDisconnect

用来解除使用kwConnect指定的绑?/p>


模块Qdojo.event.topic

Topic机制与Advice机制都能够实C件的l定Q但是显?Topic更适合处理多重l定?br>发布主题Q然后由用户订阅的机制就是一个典型的观察者模?/p>

dojo.event.topic.registerPublisher

注册主题发布?/p>

Usage Example:

dojo.event.topic.registerPublisher("myTopic", obj, "doOnClick2");


dojo.event.topic.subscribe

订阅主题

Usage Example:

dojo.event.topic.subscribe("myTopic", "test"); //执行obj.doOnClick2()以后?x)自动执行test()


dojo.event.topic.unsubscribe

取消订阅主题

Usage Example:

dojo.event.topic.unsubscribe("myTopic", "test");


dojo.event.topic.destroy

删除主题Q此主题所有的订阅都将失效

Usage Example:

dojo.event.topic.destroy("myTopic");


模块Qdojo.event.browser

dojo.event.browser.addListener

增加监听?/p>

Usage Example:

function listener()
{
  alert("ok");
}
dojo.event.browser.addListener(document, 'mousedown', listener); //事g名称可以加上"on"Q也可以没有"on"
dojo.event.browser.addListener(document, 'onmousedown', listener, true); //capture为真表示不受上层元素的事件控?/p>


dojo.event.browser.removeListener

清除监听?q个Ҏ(gu)g是无效的)


dojo.event.browser.callListener

调用监听?/p>

Usage Example:

dojo.event.browser.callListener(listener, document);


dojo.event.browser.stopPropagation

LEvent传播

Usage Example:

dojo.event.browser.stopPropagation();


dojo.event.browser.preventDefault

当前事件的q回D|ؓ(f)false

Usage Example:

dojo.event.browser.preventDefault();


dojo.event.browser.keys

键定?
  KEY_BACKSPACE: 8,
  KEY_TAB: 9,
  KEY_ENTER: 13,
  KEY_SHIFT: 16,
  KEY_CTRL: 17,
  KEY_ALT: 18,
  KEY_PAUSE: 19,
  KEY_CAPS_LOCK: 20,
  KEY_ESCAPE: 27,
  KEY_SPACE: 32,
  KEY_PAGE_UP: 33,
  KEY_PAGE_DOWN: 34,
  KEY_END: 35,
  KEY_HOME: 36,
  KEY_LEFT_ARROW: 37,
  KEY_UP_ARROW: 38,
  KEY_RIGHT_ARROW: 39,
  KEY_DOWN_ARROW: 40,
  KEY_INSERT: 45,
  KEY_DELETE: 46,
  KEY_LEFT_WINDOW: 91,
  KEY_RIGHT_WINDOW: 92,
  KEY_SELECT: 93,
  KEY_F1: 112,
  KEY_F2: 113,
  KEY_F3: 114,
  KEY_F4: 115,
  KEY_F5: 116,
  KEY_F6: 117,
  KEY_F7: 118,
  KEY_F8: 119,
  KEY_F9: 120,
  KEY_F10: 121,
  KEY_F11: 122,
  KEY_F12: 123,
  KEY_NUM_LOCK: 144,
  KEY_SCROLL_LOCK: 145


dojo.event.browser.currentEvent

最q一ơ的EventQ其属性包括:(x)

altKey  //(g)查alt键的状态,当alt键按下时Qgؓ(f) true
button  //(g)查按下的鼠标键,0 没按键,1 按左键,2 按右键,3 按左右键Q? 按中间键Q? 按左键和中间键,6 按右键和中间键,7 按所有的?br>  //q个属性仅用于onmousedown, onmouseup, ?onmousemove 事g。对其他事gQ不鼠标状态如何,都返?0Q比如onclickQ?br>clientX  //q回鼠标在窗口客户区域中的X坐标
clientY  //q回鼠标在窗口客户区域中的Y坐标
ctrlKey  //(g)查ctrl键的状态,当ctrl键按下时Qgؓ(f) true
fromElement //(g)?onmouseover ?onmouseout 事g发生Ӟ鼠标所d的元?br>keyCode  //(g)键盘事件相对应的内码,仅当type为keydown,keyup,keypress时才有效
offsetX  //(g)查相对于触发事g的对象,鼠标位置的水q_?br>offsetY  //(g)查相对于触发事g的对象,鼠标位置的垂直坐?br>propertyName //讄或返回元素的变化?jin)的属性的名称Q你可以通过使用 onpropertychange 事gQ得?propertyName 的?br>screenX  //(g)鼠标相对于用户屏幕的水q位|?br>screenY  //(g)鼠标相对于用户屏幕的垂直位|?br>shiftKey //(g)查shift键的状态,当shift键按下时Qgؓ(f)true
srcElement //q回触发事g的元?br>srcFilter //q回触发 onfilterchange 事g的o(h)?br>toElement //(g)?onmouseover ?onmouseout 事g发生Ӟ鼠标所q入的元?br>type  //q回没有“on”作ؓ(f)前缀的事件名Q比如click, mousedown
x  //q回鼠标相对于css属性中有position属性的上元素的x轴坐标。如果没有css属性中有position属性的上元素Q默认以BODY元素作ؓ(f)参考对?br>y  //q回鼠标相对于css属性中有position属性的上元素的y轴坐标。如果没有css属性中有position属性的上元素Q默认以BODY元素作ؓ(f)参考对?br>target  //同srcElement
currentTarget
layerX  //同offsetX
layerY  //同offsetY
pageX  //无水qx动条的情况下与clientX?br>pageY  //无水qx动条的情况下与clientY?br>relatedTarget // 仅当type为mouseover,mouseout时才有效
keys  //与dojo.event.browser.keys相同Q仅当type为keydown,keyup,keypress时才有效
charCode //键|仅当type为keypress时才有效


dojo.event.browser.isEvent

判断指定对象是否为event对象

Usage Example:

dojo.event.browser.isEvent(dojo.event.browser.currentEvent); //当dojo.event.browser.currentEvent不ؓ(f)null时返回true



TNT 2007-05-25 14:06 发表评论
]]>
Dojo学习(fn)W记(7. dojo.dom)http://www.aygfsteel.com/terrywu/articles/119984.htmlTNTTNTFri, 25 May 2007 05:41:00 GMThttp://www.aygfsteel.com/terrywu/articles/119984.htmlhttp://www.aygfsteel.com/terrywu/comments/119984.htmlhttp://www.aygfsteel.com/terrywu/articles/119984.html#Feedback0http://www.aygfsteel.com/terrywu/comments/commentRss/119984.htmlhttp://www.aygfsteel.com/terrywu/services/trackbacks/119984.htmlDojo学习(fn)W记(7. dojo.dom)

模块Qdojo.dom

dojo.dom.isNode

试指定对象是否?/p>

Usage Example:

dojo.dom.isNode(dojo.byId('edtTitle'));


dojo.dom.getUniqueId

取得唯一id

Usage Example:

dojo.dom.getUniqueId();  //will return dj_unique_#


dojo.dom.firstElement = dojo.dom.getFirstChildElement

取得指定节点下的W一个满x定Tag条g的子节点

Usage Example:

dojo.dom.firstElement(parentNode, 'SPAN');


dojo.dom.lastElement = dojo.dom.getLastChildElement

取得指定节点下的最后一个满x定Tag条g的子节点

Usage Example:

dojo.dom.lastElement(parentNode, 'SPAN');


dojo.dom.nextElement = dojo.dom.getNextSiblingElement

取得指定节点的下一个满x定Tag条g的子节点

Usage Example:

dojo.dom.nextElement(node, 'SPAN');


dojo.dom.prevElement = dojo.dom.getPreviousSiblingElement

取得指定节点的前一个满x定Tag条g的子节点

Usage Example:

dojo.dom.prevElement(node, 'SPAN');


dojo.dom.moveChildren

把指定节点下的所有子节点Ud到目标节点下Qƈq回Ud的节Ҏ(gu)

Usage Example:

dojo.dom.moveChildren(srcNode, destNode, true); //仅移动子节点QsrcNode中的文字被丢弃
dojo.dom.moveChildren(srcNode, destNode, false);//包括文字和子节点都将被移动到目标节点?/p>


dojo.dom.copyChildren

把指定节点下的所有子节点复制到目标节点下Qƈq回复制的节Ҏ(gu)

Usage Example:

dojo.dom.moveChildren(srcNode, destNode, true); //仅复制子节点QsrcNode中的文字被忽略
dojo.dom.moveChildren(srcNode, destNode, false);//包括文字和子节点都将被复制到目标节点?/p>


dojo.dom.removeChildren

删除指定节点下的所有子节点Qƈq回删除的节Ҏ(gu)

Usage Example:

dojo.dom.moveChildren(node);


dojo.dom.replaceChildren

用指定的新节Ҏ(gu)换父节点下的所有子节点

Usage Example:

dojo.dom.replaceChildren(node, newChild); //目前q不支持newChild为数lŞ?/p>


dojo.dom.removeNode

删除指定的节?/p>

Usage Example:

dojo.dom.removeNode(node);


dojo.dom.getAncestors

q回指定节点的父节点集合

Usage Example:

dojo.dom.getAncestors(node, null, false); //q回所有的父节炚w合(包括指定的节点nodeQ?br>dojo.dom.getAncestors(node, null, true); //q回最q的一个父节点
dojo.dom.getAncestors(node, function(el){/* 此处增加qo(h)条g */return true}, false); //q回所有满x件的父节炚w?/p>


dojo.dom.getAncestorsByTag

q回所有符合指定Tag的指定节点的父节炚w?/p>

Usage Example:

dojo.dom.getAncestorsByTag(node, 'span', false); //q回所有的cd为SPAN的父节点集合
dojo.dom.getAncestorsByTag(node, 'span', true);  //q回最q的一个类型ؓ(f)SPAN的父节点


dojo.dom.getFirstAncestorByTag

q回最q的一个符合指定Tag的指定节点的父节?/p>

Usage Example:

dojo.dom.getFirstAncestorByTag(node, 'span'); //q回最q的一个类型ؓ(f)SPAN的父节点


dojo.dom.isDescendantOf

判断指定的节Ҏ(gu)否ؓ(f)另一个节点的子孙

Usage Example:

dojo.dom.isDescendantOf(node, ancestor, true); //判断node是否为ancestor的子?br>dojo.dom.isDescendantOf(node, node, false); //will return true
dojo.dom.isDescendantOf(node, node, true); //will return false


dojo.dom.innerXML

q回指定节点的XML

Usage Example:

dojo.dom.innerXML(node);


dojo.dom.createDocument

创徏一个空的文档对?/p>

Usage Example:

dojo.dom.createDocument();


dojo.dom.createDocumentFromText

Ҏ(gu)文字创徏一个文档对?/p>

Usage Example:

dojo.dom.createDocumentFromText('<?xml version="1.0" encoding="gb2312" ?><a>1</a>','text/xml');


dojo.dom.prependChild

指定的节点插入到父节点的最前面

Usage Example:

dojo.dom.prependChild(node, parent);


dojo.dom.insertBefore

指定的节点插入到参考节点的前面

Usage Example:

dojo.dom.insertBefore(node, ref, false); //如果满要求的话q接退?br>dojo.dom.insertBefore(node, ref, true);


dojo.dom.insertAfter

指定的节点插入到参考节点的后面

Usage Example:

dojo.dom.insertAfter(node, ref, false); //如果满要求的话q接退?br>dojo.dom.insertAfter(node, ref, true);


dojo.dom.insertAtPosition

指定的节点插入到参考节点的指定位置

Usage Example:

dojo.dom.insertAtPosition(node, ref, "before");//参考节点之?br>dojo.dom.insertAtPosition(node, ref, "after"); //参考节点之?br>dojo.dom.insertAtPosition(node, ref, "first"); //参考节点的W一个子节点
dojo.dom.insertAtPosition(node, ref, "last");  //参考节点的最后一个子节点
dojo.dom.insertAtPosition(node, ref); //默认位置?last"


dojo.dom.insertAtIndex

指定的节点插入到参考节点的子节点中的指定烦(ch)引的位置

Usage Example:

dojo.dom.insertAtIndex(node, containingNode, 3);  //把node插入到containingNode的子节点中,使其成ؓ(f)W?个子节点


dojo.dom.textContent

讄或获取指定节点的文本

Usage Example:

dojo.dom.textContent(node, 'text'); //讄node的文本ؓ(f)'text'
dojo.dom.textContent(node); //q回node的文?/p>


dojo.dom.hasParent

判断指定节点是否有父节点

Usage Example:

dojo.dom.hasParent(node);


dojo.dom.isTag

判断节点是否h指定的tag

Usage Example:

var el = document.createElement("SPAN");
dojo.dom.isTag(el, "SPAN"); //will return "SPAN"
dojo.dom.isTag(el, "span"); //will return ""
dojo.dom.isTag(el, "INPUT", "SPAN", "IMG"); //will return "SPAN"



TNT 2007-05-25 13:41 发表评论
]]>
Dojo学习(fn)W记(6. dojo.io.IO & dojo.io.BrowserIO)http://www.aygfsteel.com/terrywu/articles/119983.htmlTNTTNTFri, 25 May 2007 05:39:00 GMThttp://www.aygfsteel.com/terrywu/articles/119983.htmlhttp://www.aygfsteel.com/terrywu/comments/119983.htmlhttp://www.aygfsteel.com/terrywu/articles/119983.html#Feedback0http://www.aygfsteel.com/terrywu/comments/commentRss/119983.htmlhttp://www.aygfsteel.com/terrywu/services/trackbacks/119983.htmlDojo学习(fn)W记(6. dojo.io.IO & dojo.io.BrowserIO)

模块Qdojo.io.IO

dojo.io.bind


处理h取回需要的数据q处?/p>

 

q个函数是AJAX中最为重要和有用的函敎ͼdojo.io.bindq个cL用来处理客户端与服务器间通讯的,需要通讯的参数由对象dojo.io.Request所定义Q具体通讯的方法则由另外一个对象Transport所提供?/p>

 

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


虽然我们可以定义一个自qTransportQ但是显然不如直接利用现成的Transport方便?/p>


Dojo里提供了(jin)一个同时兼容IE和Firefox的dojo.io.XMLHTTPTransportQ但是这个对象位?dojo.io.BrowserIOQ因此,一般require dojo.io.IOӞq应该require dojo.io.BrowserIO

 

Usage Example:

  dojo.io.bind({
    url: "http://localhost/test.html", //要请求的面地址
    mimetype: "text/html", //h的页面的cdQ应该设|ؓ(f)与你h面cd对应的mimetypeQ默认ؓ(f) "text/plain"
    methodQ?GET", //默认?GET"
    sync: false, //默认为异步执?br>    useCache: false, //默认Z使用面~存Q注意这里的~存q不是浏览器的缓存,而是Dojo自n所l护的页面缓?br>    preventCache: false, //默认为启用浏览器~存Q否则将通过自动增加不同的参数来保览器缓存失?br>    timeoutSeconds: 3000,  //3U后时Q如果ؓ(f)0则永不超?/p>

    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("h时Q?); }
  });


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

 

  dojo.io.bind({
    url: "http://localhost/test.html", //要请求的面地址
    mimetype: "text/html", //h的页面的cdQ应该设|ؓ(f)与你h面cd对应的mimetype
    timeoutSeconds: 3000,  //3U后时Q如果ؓ(f)0则永不超?br>    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中指定所用的transportQ则Dojo?x)自动的在已注册的transports中寻找能够处理这个Request的transportQ如果不能找刎ͼ则返回指定的Request。下面是一个指定了(jin)transport的例?


  dojo.io.bind({
    url: "http://localhost/test.html", //要请求的面地址
    mimetype: "text/html", //h的页面的cdQ应该设|ؓ(f)与你h面cd对应的mimetype
    timeoutSeconds: 3000,  //3U后时Q如果ؓ(f)0则永不超?br>    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("h时Q?); }
  });


  你还可以利用bind来得C个JavaScript所定义的对象(注意mimetype必须要定义ؓ(f)"text/javascript"Q?/p>

 

  testObj = dojo.io.bind({
    url: "http://localhost/test.js", //test.js里定义了(jin)一个对?br>    mimetype: "text/javascript", //h的页面的cdQ应该设|ؓ(f)与你h面cd对应的mimetype
    timeoutSeconds: 3000,  //3U后时Q如果ؓ(f)0则永不超?br>    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", //h的页面的cdQ应该设|ؓ(f)与你h面cd对应的mimetype
    timeoutSeconds: 3000,  //3U后时Q如果ؓ(f)0则永不超?br>    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("h时Q?); }
  });

 

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


  dojo.io.bind({
    url: "http://localhost/test.aspx", //要提交的面地址
    mimetype: "text/html", //h的页面的cdQ应该设|ؓ(f)与你h面cd对应的mimetype
    timeoutSeconds: 3000,  //3U后时Q如果ؓ(f)0则永不超?br>    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("h时Q?); }
  });


 

dojo.io.queueBind


  有时Q我们需要一ơ发出多个网请求,则应该用dojo.io.queueBindQ因为浏览器可能只允许同时发出有限个数的hQ如果是使用dojo.io.bind的话Q则有可能会(x)甌不到新的XMLHttp对象而导致出错?br>
  用法与dojo.io.bind是一L(fng)?/p>


 

dojo.io.argsFromMap


  用来把对象{换ؓ(f)URL的参数Ş?br> 
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格式Q否则dojo.string.encodeAsciiq回的编码是很怪异?br>  dojo.io.argsFromMap({a:1,b:2,c:3}, "utf", "c"); //will return "b=2&a=1&c=3"Q最后一个参数可以控制指定名U的值出现在最?br> 

 

dojo.io.setIFrameSrc


  讄IFrame的Src
 
Usage Example:

 

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


 

TODO: 补充一个kwArgs的例子,我之前在|上看见q,可是现在无论如何也找不到相关的页面了(jin)Q只好以后在举例?/p>

 


模块Qdojo.io.BrowserIO

 

基本上就提供?jin)dojo.io.XMLHTTPTransportq个对象


XMLHTTPTransport一般能够满x们的需求,但是其有几个限制Q它不能传输文gQ不能够成功执行跨域名的q程hQƈ且不支持 file:// q样的协?/p>


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

 

dojo.io.IframeTransportQ用法与xmlhttp是一L(fng)Q其优点是可以跨域Q不存在M的安全问?br>如果 Request指定的mimetype是text或javascriptQ返回的内容应该是放在第一个textarea里的内容Q如果指定的 mimetype是htmlQ则IFrame里的html则是需要的内容。因为浏览器兼容的原因,IframeTransport不能正确处理q回cd?XML的请求?

 

关于RpcQ这个类gRemoting的东西,也将在以后对其进行介l?/p>

TNT 2007-05-25 13:39 发表评论
]]>
Dojo学习(fn)W记(5. dojo.lang.array & dojo.lang.func & dojo.string.extras)http://www.aygfsteel.com/terrywu/articles/119982.htmlTNTTNTFri, 25 May 2007 05:38:00 GMThttp://www.aygfsteel.com/terrywu/articles/119982.htmlhttp://www.aygfsteel.com/terrywu/comments/119982.htmlhttp://www.aygfsteel.com/terrywu/articles/119982.html#Feedback0http://www.aygfsteel.com/terrywu/comments/commentRss/119982.htmlhttp://www.aygfsteel.com/terrywu/services/trackbacks/119982.htmlDojo学习(fn)W记(5. dojo.lang.array & dojo.lang.func & dojo.string.extras)

模块Qdojo.lang.array

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

dojo.lang.isEmpty
判断对象或数l是否ؓ(f)I?br>Usage Example:
  dojo.lang.isEmpty({a: 1}); //will return false
  dojo.lang.isEmpty([]); //will return true

dojo.lang.map
调用指定的方法处理指定的数组或字W串
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
遍历指定的数l或字符Ԍq对其中的元素调用指定的Ҏ(gu)
Usage Example:
  dojo.lang.forEach("abc", function(x) { alert(x); });

dojo.lang.every
(g)查指定的数组是否全部满指定Ҏ(gu)的条?br>Usage Example:
  dojo.lang.every([1,-2,3], function(x) { return x > 0; }); //指定的数l不是全大于0的,因此q回false

dojo.lang.some
(g)查指定的数组是否部分满指定Ҏ(gu)的条?br>Usage Example:
  dojo.lang.some([1,-2,3], function(x) { return x > 0; }); //指定的数l有大于0的元素,因此q回true

dojo.lang.filter
Ҏ(gu)指定的方法来qo(h)指定的数l?br>Usage Example:
  dojo.lang.filter([1,-2,3], function(x) { return x > 0; }); //will return [1, 3]

dojo.lang.unnest
把指定的参数或数l{换ؓ(f)一l数l?br>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
输入{换ؓ(f)数组
Usage Example:
  function test()
  {
    return dojo.lang.toArray(arguments, 1);
  }
  test(1,2,3,4,5); //will return [2,3,4,5]

模块Qdojo.lang.func
dojo.lang.hitch
指定的Ҏ(gu)挂在指定的对象下q返回该Ҏ(gu)
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
q回自n对象的指定名U的Ҏ(gu)引用
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? 请参阅这文章:(x)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.curry(null, add)(2)(3); //will return 5
  dojo.lang.curry(null, add)()(2)(3); //will return 5

dojo.lang.curryArguments
与dojo.lang.currycMQ但是可以选择忽略掉前n个参?br>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
试参数指定所有函敎ͼq返回第一个返回g?的函数?br>from seno: 
dojo.lang.tryTheseҎ(gu)和prototype中的Try.these()Ҏ(gu)是一L(fng)Q?
xmlNode.text在一些浏览器中好用,但是xmlNode.textContent在另一些浏览器中正常工作?使用Try.these()Ҏ(gu)我们可以得到正常工作的那个方法的q回倹{?
<script>
function getXmlNodeValue(xmlNode){
return Try.these(
function() {return xmlNode.text;},
function() {return xmlNode.textContent;)
);
}

dojo.lang.delayThese
没看懂这个函数怎么?br>
模块Qdojo.string.extras

dojo.string.substituteParams
cMC#中的String.Format函数
%{name}要保证与传入的对象的名称大小写一_(d)否则?x)出异?br>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
把每一个单词的首字母大?br>Usage Example:
  dojo.string.capitalize("show me love"); //will return "Show Me Love"

dojo.string.isBlank
判断输入字符串是否ؓ(f)I或全是I白字符Q如果传入对象ؓ(f)非字W串则也?x)返回true
Usage Example:
  dojo.string.isBlank("   1   "); //will return false

dojo.string.escape
参数1为typeQ可传gؓ(f): xml/html/xhtml, sql, regexp/regex, javascript/jscript/js, ascii
按照所传type对字W串q行~码
Usage Example:
  dojo.string.escape("html", "<input type='text' value='' />"); //will return "&lt;input
type='text' value='' /&gt;"

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

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

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

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

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

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

dojo.string.has
判断输入字符串是否含有Q意指定的字符?br>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
字W串按分隔符转换为数l?br>Usage Example:
  dojo.string.splitEscaped("a\\_b_c", '_'); //will return ["a\\_b", "c"]

TNT 2007-05-25 13:38 发表评论
]]>
Dojo学习(fn)W记(4. dojo.string & dojo.lang)http://www.aygfsteel.com/terrywu/articles/119979.htmlTNTTNTFri, 25 May 2007 05:35:00 GMThttp://www.aygfsteel.com/terrywu/articles/119979.htmlhttp://www.aygfsteel.com/terrywu/comments/119979.htmlhttp://www.aygfsteel.com/terrywu/articles/119979.html#Feedback0http://www.aygfsteel.com/terrywu/comments/commentRss/119979.htmlhttp://www.aygfsteel.com/terrywu/services/trackbacks/119979.htmlDojo学习(fn)W记(4. dojo.string & dojo.lang)

模块Qdojo.string.common / dojo.string
dojo.string.common ?dojo.string 是一L(fng)Q只要require其中一个就可以使用以下Ҏ(gu)
dojo.string.trim
L字符串的I白
Usage Example:
= " abc ";
dojo.string.trim(s);      
//will return "abc"
dojo.string.trim(s, 0);      //will return "abc"
dojo.string.trim(s, 1);      //will return "abc "
dojo.string.trim(s, -1);//will return " abc"
dojo.string.trimStart
L字符串开头的I白
Usage Example:
= " abc ";
dojo.string.trimStart(s);      
//will return "abc "
dojo.string.trimEnd L字符串结I白 Usage Example:
= " abc ";
dojo.string.trimEnd(s);            
//will return " abc"
dojo.string.repeat 生成由同一字符(?重复l成的字W串 Usage Example:
dojo.string.repeat("a"4); //will return "aaaa"
dojo.string.repeat("1234"3"-"); //will return "1234-1234-1234"
dojo.string.pad 使用字符补齐字符? Usage Example:
dojo.string.pad("100"6);            //will return "000100"
dojo.string.pad("100"6"0"1);      //will return "000100"
dojo.string.pad("100"6"0"-1);      //will return "100000"
dojo.string.padLeft 使用字符补齐字符串开? Usage Example:
dojo.string.padLeft("100"6);            //will return "000100"
dojo.string.padRight 使用字符补齐字符串结? Usage Example:
dojo.string.padRight("100"6);            //will return "100000"



模块Qdojo.lang.common / dojo.lang
dojo.lang.common ?dojo.lang 是一L(fng)Q只要require其中一个就可以使用以下Ҏ(gu)
dojo.lang.mixin
一个对象的Ҏ(gu)和属性增加到另一个对象上
Usage Example:
var s1 = {name: "TestObj", test1: function(){alert("this is test1!");}}
var s2 = {value: 1000, test2: function(){alert("this is test2!");}}
var d = {};
dojo.lang.mixin(d, s1, s2); 
//执行后d具备了(jin)s1和s2的所有属性和Ҏ(gu)
d.test1();
dojo.lang.extend 为指定类的原型扩展方法与属? Usage Example:
TestClass = function() {};
dojo.lang.extend(TestClass, 
{name: "demo", test: function(){alert("Test!");}});
var o = new TestClass();  //TestClass本来是没有testҎ(gu)的,但是extend以后有testҎ(gu)?/span>
o.test();
dojo.lang.find=dojo.lang.indexOf 查找指定对象在指定数l中的位|? Usage Example:
var arr = [1,2,3,3,2,1];
dojo.lang.find(arr, 
2);                  //will return 1
dojo.lang.find(arr, 2true);            //will return 1
dojo.lang.find(arr, "2"true);            //will return -1
dojo.lang.find(arr, "2"false);      //will return 1
dojo.lang.find(arr, 2truetrue);      //will return 4
dojo.lang.findLast=dojo.lang.lastIndexOf 查找指定对象在指定数l中的位|,从后往前查 Usage Example:
var arr = [1,2,3,3,2,1];
dojo.lang.findLast(arr, 
2);                  //will return 4
dojo.lang.findLast(arr, 2true);            //will return 4
dojo.lang.findLast(arr, "2"true);            //will return -1
dojo.lang.findLast(arr, "2"false);            //will return 4
dojo.lang.inArray 查找指定对象是否在指定数l中 Usage Example:
var arr = [1,2,3];
dojo.lang.inArray(arr, 
1);      //will return true
dojo.lang.inArray(arr, 4);      //will return false
dojo.lang.isObject 判断输入的类型是否ؓ(f)对象 Usage Example:
dojo.lang.isObject(new String());      //will return true
dojo.lang.isObject("123"));      //will return false
dojo.lang.isArray 判断输入的类型是否ؓ(f)数组 Usage Example:
dojo.lang.isArray({a:1,b:2});      //will return false
dojo.lang.isArray([1,2,3]);      //will return true
dojo.lang.isFunction 判断输入的类型是否ؓ(f)函数 Usage Example:
dojo.lang.isFunction(function() {});      //will return true
dojo.lang.isString 判断输入的类型是否ؓ(f)字符? Usage Example:
dojo.lang.isString("");      //will return true
dojo.lang.isString(0);      //will return false
dojo.lang.isAlien 判断输入的类型是否ؓ(f)pȝ函数 Usage Example:
dojo.lang.isAlien(isNaN);      //will return true
dojo.lang.isBoolean 判断输入的类型是否ؓ(f)布尔cd Usage Example:
dojo.lang.isBoolean(2>1);      //will return true

dojo.lang.isNumber
判断输入的类型是否ؓ(f)数|Ҏ(gu)注释所_(d)此函C用不太可靠,但是可替换用的pȝ函数isNaN也不太可?br>
dojo.lang.isUndefined
判断输入是否为未定义Q根据注释所_(d)此函数有可能?x)导致抛出异常,推荐使?typeof foo == "undefined" 来判?/pre>

模块Qdojo.lang.extras
dojo.lang.setTimeout 延迟指定旉后执行指定方? Usage Example:
function onTime(msg)
{
dojo.debug(msg)
}

dojo.lang.setTimeout(onTime, 
1000"test"); //1U后?x)输(gu)试信?test"
dojo.lang.setTimeout(dojo, "debug"1000"test"); //1U后?x)输(gu)试信?test"
dojo.lang.getNameInObj 获得指定目在指定对象中的名U? Usage Example:
dojo.lang.getNameInObj(dojo, dojo.debug);      //will return "debug"
dojo.lang.shallowCopy q回指定对象的浅表复制副? Usage Example:
dojo.lang.shallowCopy({});    //will return a I对?/span>
dojo.lang.firstValued q回W一个存在定义的参数 Usage Example:
var a;
dojo.lang.firstValued(a,
2,3);      //will return 2

以上全部是自己阅L代码写的ȝQ如有错误,q请指明?


TNT 2007-05-25 13:35 发表评论
]]>Dojo学习(fn)W记(3. Dojo的基对象和方?http://www.aygfsteel.com/terrywu/articles/119978.htmlTNTTNTFri, 25 May 2007 05:34:00 GMThttp://www.aygfsteel.com/terrywu/articles/119978.htmlhttp://www.aygfsteel.com/terrywu/comments/119978.htmlhttp://www.aygfsteel.com/terrywu/articles/119978.html#Feedback0http://www.aygfsteel.com/terrywu/comments/commentRss/119978.htmlhttp://www.aygfsteel.com/terrywu/services/trackbacks/119978.htmlDojo学习(fn)W记(3. Dojo的基对象和方?

q里所说的基础对象和方法是指的不RequireM包就能够调用的对象和Ҏ(gu)

匿名函数

在开始前Q我想介l一下js里的匿名函数Q这个在阅读dojo的源代码的时候,?x)发现到处都有匿名函?/p>

;(function(){
alert(
123);
}
)();
//前面的分h一个空语句Q是可以不要?/span>

匿名函数。一个匿名函数就是一个没有名字的函数?/p>

你可以认Z们是一ơ性函数。当你只需要用一ơ某个函数时Q他们就特别有用。通过使用匿名函数Q没有必要把函数一直放在内存中Q所以用匿名函数更加有效率?/p>

当然你也可以Ҏ(gu)不定义函敎ͼ但是使用匿名函数可以把你的代码分D,像C#中的#region一?/p>

dojo.byId

非常有用的一个方法,与prototype.js的著名的$一?/p>

g以前的版本还有dojo.byIdArray, 不过最新的版本已经找不到这个函C(jin)(除了(jin)src\compat\0.2.2.js)

如果有多个元素具有指定的idQ则q回的是一个集?/p>

Usage Example:

 dojo.byId("divTest");
 dojo.byId(
"divTest", document);
 dojo.byId(document.getElementById(
"divTest"));

 

dojo.version

dojo的版本,可以取得major, minor, patch, flag和revision

q个对象没什么太大用处,除非你要Ҏ(gu)dojo的版本选择执行你的代码

dojo.raise

抛出一个异?/p>

dojo.errorToString

异常{换ؓ(f)字符?/p>

Usage Example:

 try
 
{
    dojo.raise(
"打印p|"new Error("文g不存?/span>"));
 }

 
catch(e)
 
{
    alert(dojo.errorToString(e));
 }

 

dojo.render

pȝ环境对象

dojo.render.name     q回 browser Q说明是工作在浏览器?br>dojo.render.ver        q回 4 Q似乎没什么用
dojo.os.win            q回true说明操作pȝ是Windows
dojo.os.linux           q回true说明操作pȝ是Linux
dojo.os.osx            q回true说明操作pȝ是MacOS
dojo.html.ie             q回true说明览器是Internet Explorer
dojo.html.opera             q回true说明览器是Opera
dojo.html.khtml             q回true说明览器是Konqueror
dojo.html.safari      q回true说明览器是Safari
dojo.html.moz        q回true说明览器是Mozilla FireFox
dojo.svg.capable     q回true说明览器支持svg
dojo.vml.capable     q回true说明览器支持vml
dojo.swf.capable    q回true说明览器支持swf
dojo.swt.capable     q回true说明览器支持swt (IBM开发的Standard Widget Toolkit)

如果dojo.html.ie为true的话

dojo.html.ie50         q回true说明览器是IE 5.0
dojo.html.ie55         q回true说明览器是IE 
5.5
dojo.html.ie60         q回true说明览器是IE 
6.0
dojo.html.ie70         q回true说明览器是IE 
7.0

 

dojo.addOnLoad

可以加蝲指定函数到window.load时执行,好处是可以很方便的在window.load时执行多个函?/p>

Usage Example:

 dojo.addOnLoad(init);                    //init是一个函?/span>
 dojo.addOnLoad(myObject, init);       //init是myObject对象的一个方?/span>

 

dojo.require

如果你想调用一个模块的对象的时候,你应该首先用dojo.require来请求这个模块,dojo?x)根据你的请求自动取得相应的js文gQƈ加蝲到内存中Q这样你才能调用或创建其中的对象

dojo?x)自动维护已加蝲的模块列表,所以是不会(x)重复加蝲模块?/p>

Usage Example:

 dojo.require("dojo.event");

dojo.requireIf=dojo.requireAfterIf

可以Ҏ(gu)指定的条件来军_是否加蝲指定的模?/p>

Usage Example:

 dojo.requireIf(dojo.html.ie, "dojo.html");   //如果dojo.html.ie为trueQ才?x)加载dojo.html模块

 

dojo.provide

除非你要开发自q模块Q不然是用不到这个方法的Q你可以q句看成是向pȝ注册q个模块名称

Usage Example:

 dojo.provide("dojo.custom");

dojo.exists

判断指定对象是否h指定名称的方?/p>

Usage Example:

 dojo.exists(dojo, "exists"); //will return true

 

dojo.hostenv.getText

q回指定url的内?/p>

PS: ׃览器的安全限制Q因此只能用于取得同域名的url的内容,否则?x)报告权限不?/p>

Usage Example:

 aSync = false//同步Q确保返回内容不为null
 silent = true//不抛出错?/span>
 s = dojo.hostenv.getText("http://www.google.com/", aSync, silent); //q回Google的首늚HTML
 alert(s);

dojo.debug

输出调试信息Q如果在djConfig中指定了(jin)debugContainerIdQ则输出到指定的console容器中,否则直接document.write

所有的调试信息均以 DEBUG: 开?/p>

Usage Example:

 dojo.debug("q是调试信息");

 

dojo.hostenv.println

与dojo.debugcMQ不同的是,输出内容没有 DEBUG:

Usage Example:

 dojo.hostenv.println("q是一般的输出信息");

 

dojo.debugShallow

输出指定对象的全部信?Shallow说明q不?x)遍历到下一U别的对象属?以供调试

Usage Example:

 dojo.debugShallow(dojo.render.html);


TNT 2007-05-25 13:34 发表评论
]]>
Dojo学习(fn)W记(2. djConfig解说)http://www.aygfsteel.com/terrywu/articles/119974.htmlTNTTNTFri, 25 May 2007 05:31:00 GMThttp://www.aygfsteel.com/terrywu/articles/119974.htmlhttp://www.aygfsteel.com/terrywu/comments/119974.htmlhttp://www.aygfsteel.com/terrywu/articles/119974.html#Feedback0http://www.aygfsteel.com/terrywu/comments/commentRss/119974.htmlhttp://www.aygfsteel.com/terrywu/services/trackbacks/119974.htmlDojo学习(fn)W记(2. djConfig解说)


djConfig是dojo内置的一个全局讄对象Q其作用是可以通过其控制dojo的行?br>
首先我们需要在引用dojo.js前声明djConfig对象Q以便在加蝲dojo.js的时候才能够取得所讄的|虽然?.3版本以后dojo支持在加载后讄Q但是强烈徏议你把声明djConfig的代码作为第一Dscript

一个完整的djConfig对象定义如下Q值均为dojo的默认|(j)

<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>

isDebug是一个很有用的属性,֐思义Q如果设|ؓ(f)真,则所有dojo.Debug的输出有效,开发时应该讄为trueQ发布时应该讄为false

debugContainerId同样也是与调试有关的Q如果不指定的话Q调试信息将?x)直接利?document.write输出Q这样可能会(x)破坏面的整体布局Q所以你可以指定M一个可以作为容器的html元素的id作ؓ(f)调试信息输出容器

allowQueryConfigQ这个属性指?dojo是否允许从页面url的参CddjConfig中的相关属性,当gؓ(f)trueӞdojo?x)优先从url参数中读取djConfig的其他属性,比如: http://server/dojoDemo.htm?djConfig.debugContainerId=divDebug

baseScriptUriQ一般不需要设|,dojo?x)自动根据你引用dojo.js的\径设|这个|比如Q?lt;script type="text/javascript" src="../dojo/dojo.js"></script>Q自动获取的g?../dojo/
ps: 如果你有多个工程需要同时引用dojo.js的话Q徏议也把dojo当作一个独立的工程Q引用的时候采用绝对\径就可以?br>
parseWidgetsQ这个是可以控制dojo是否自动解析hdojoType的html元素为对应的widgetQ如果你没有使用MWidgetQ徏议设|ؓ(f)false以加快dojo的加载速度

searchIdsQ这是一个字W串数组Q定义了(jin)所有需要解析ؓ(f)widget的html元素的IDQ如果ID不在其中的html元素是不?x)被解析的,当数lؓ(f)I数l时Q则所有具有dojoType的元素都?x)被解?br>
q有一个bindEncodingQ是用来讄默认的bindh的编码方?br>
至于其它的属性,不是用处不大Q就是不知道有什么作?br>
在实际开发中Q可以把djConfig的定义放在一个js文g里,q将其作为第一个引用的js文gQ这样应该是最方便的?/p>

TNT 2007-05-25 13:31 发表评论
]]>
Dojo学习(fn)W记(1. 模块与包)http://www.aygfsteel.com/terrywu/articles/119970.htmlTNTTNTFri, 25 May 2007 05:29:00 GMThttp://www.aygfsteel.com/terrywu/articles/119970.htmlhttp://www.aygfsteel.com/terrywu/comments/119970.htmlhttp://www.aygfsteel.com/terrywu/articles/119970.html#Feedback0http://www.aygfsteel.com/terrywu/comments/commentRss/119970.htmlhttp://www.aygfsteel.com/terrywu/services/trackbacks/119970.html

Dojo学习(fn)W记(1. 模块与包)


Intro:


Dojo是一个非常强大的面向对象的JavaScript的工L(fng), 读者能够去补充一下JavaScript下如何用OOq行~程? q对于你以后阅读Dojo Source有很大的用处

请大家下载dojo 0.3.1, 以下的说明均针对此版?br>
译?a >http://manual.dojotoolkit.org/WikiHome/DojoDotBook/BookUsingDojo


Getting Started

1: 把Dojo加入到我们的WebE序?br>
1. 标志

<script type="text/javascript">
 djConfig 
= { isDebug: false };
</script>

djConfig是Dojo里的一个全局对象, 其作用就是ؓ(f)Dojo提供各种选项, isDebug是最常用的属性之一, 讄为True以便能够在页面上直接看到调试输出, 当然其中q有些属性与调试有关, q里׃|烦(ch)?br>
2. 引用 dojo 的启动代?/p>

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

q样你就引用?jin)dojo的代? q可以直接用其中部分常用的对象, 下蝲下来的dojo.js是压~?remove comments and space)后的代码, 要阅ȝ?阅读dojo.js.uncompressed.js, dojo.js大概?27K, 而未压羃前有211K, ok, Z么会(x)q么大呢, 原来其已l把部分常用的模块整合进dojo.js? 因此昑־大了(jin)一? build.txt里就说明?jin)默认的dojo.js包含?jin)哪些模?br>
3. 声明你所要用到的?/p>

<script type="text/javascript">
  dojo.require(
"dojo.math");
  dojo.require(
"dojo.io.*");
  dojo.require(
"dojo.widget.*");
</script>

 你就把这些代码当成是java的import语句或C#中的using语句一? 如果你不require的话, 而模块本w又没有整合在dojo.js? 是会(x)出现脚本错误的喔

2. 针对不同需求提供的预整合包

Dojo 本n是由许多模块所l合而成? 但是׃用户需求的多样? dojo针对不同的需求而提供了(jin)不同的版? 用户在下载dojo的时候就看见可以选择很多的版? 比如Ajax版和W(xu)idget? 每个版本最重要的区别就在于dojo.js文g, 但是除此之外, 每一个版本都是全功能? dojo.jsҎ(gu)版本的不同而整合进?jin)不同的模?br>
3. 直接获取Dojo的最新源代码

首先你必d?Subversion, 当Subversion在你的电(sh)脑上能够正常工作?你就可以通过如下命o(h)下蝲dojo的源代码:

svn co http://svn.dojotoolkit.org/dojo/trunk/

q会(x)在你的当前目录下创徏一?trunk 的目? 如果你希望直接Get到当前目? 用这个命?

svn co http://svn.dojotoolkit.org/dojo/trunk/ .

或者你希望Get到当前目录下?MyDir 目录, 用这个命?

svn co http://svn.dojotoolkit.org/dojo/trunk/ MyDir


模块与包

模块

Dojo的代码被划分为逻辑单元UC为模? q有点类gJava中的package,除了(jin)dojo的模块能够包含类 (cM于java中的classes)和简单函?br>
比如: 模块"dojo.html"包含?jin)一pd的函? 比如dojo.html.getContentBox(), 模块"dojo.dnd"包含?jin)一pd的HtmlDragObject的类

注意名称U定, 函数的首字母为小写字?cȝ首字母ؓ(f)大写

模块也可以称之ؓ(f)"命名I间"

?br>
在多数情况下, dojo的模块只需要定义在一个文件就可以? 但有? 一个模块可能划分到多个文g, 比如: 模块dojo.html, 本来是定义在一个文件中, 可是׃功能的增? 文g逐渐变大, 我们不得不将其拆分ؓ(f)多个文g, q主要是为性能考虑, 以便览器可以只下蝲光要用到的代码, 不幸的是其实现细节对于dojo的用L(fng)h不那么透明, 你必ȝ道你惌用到的功能到底是包含在哪个文? 然后才能requireq用它

q样的每一个文仉UCZ个包

dojo.require("dojo.html.extras")

 引用文?src/html/extras.js, q将定义模块 dojo.html 的若q?q所?函数

据我所? 管单个文g可以定义包里的多个类, 单个脚本文g不能定义多个模块 (在Java可以{效于在一个文件中定义2个类), q且, 包的名称和模块的名称可以不同, 比如: 包dojo.widget.Button定义?jin)dojo.widget.html.Button

基本上你应该q样认ؓ(f), 包和模块管密切相关, 但是是两个完全不同的实体

Z么会(x)有模块和包这L(fng)概念?

Z么会(x)有模块和包这L(fng)概念? Z(jin)满你的应用E序只需要加载其所用到的东西的需? 充分利用模块化设计的优点, dojol护?jin)最的_以便仍能提供你所需要的功能, Z么要你的用户费旉M载用不到的JavaScript, 当一个包是一个js文g? 一个模块本质上是一个命名空? 比如: dojo.style ?dojo.html.extras
多数单情况下, 一个包包含?jin)一个模? 但更常见的是, 一个模块可能被拆分为几个包文g

利用包和模块, 能保你能够交付最相关的功能代? 最程度的减少代码的膨胀和消除由此带来的不好的用户体?q就是模块设计的主要目标, 通过模块? 你能够引入自定义模块(你自己拥有的 JavaScript 工具), q且l护模块对于核心(j)代码库基本不?x)生什么媄(jing)?br>
另外, Dojo的模块系l也提供?jin)内建的机制来用代码提供命名空? 比如, 通过模块dojo.event定义的Dojo的事件系l?br>
怎样引用

讄引用语句

你怎样才能知道该引用哪个包到dojo.require()?

1. 模块

首先, 定你要使用什么模? q个例子我们假定你要使用 dojo.lfx.html

2. ?br>
搜烦(ch)代码后你发现dojo.lfx.html定义?个文?

  • src/lfx/html.js
  • src/lfx/extras.js

Ҏ(gu)你要用到的功? 你可?nbsp;

dojo.require("dojo.lfx.html");

?nbsp;

dojo.require("dojo.lfx.html");
dojo.require(
"dojo.lfx.extras");


通配W?br>
新用户可能会(x)对dojo.lfx.*q样可以替代上?句而感到诧? 实际? __package__.js 中已l定义了(jin)通配W可以代替的语句, q且q样可以让dojoҎ(gu)当时的环境而决定加载具体的模块



TNT 2007-05-25 13:29 发表评论
]]>
dojo.io.bind http://www.aygfsteel.com/terrywu/articles/119740.htmlTNTTNTThu, 24 May 2007 07:50:00 GMThttp://www.aygfsteel.com/terrywu/articles/119740.htmlhttp://www.aygfsteel.com/terrywu/comments/119740.htmlhttp://www.aygfsteel.com/terrywu/articles/119740.html#Feedback0http://www.aygfsteel.com/terrywu/comments/commentRss/119740.htmlhttp://www.aygfsteel.com/terrywu/services/trackbacks/119740.html
处理h取回需要的数据q处?/p>

 

q个函数是AJAX中最为重要和有用的函敎ͼdojo.io.bindq个cL用来处理客户端与服务器间通讯的,需要通讯的参数由对象dojo.io.Request所定义Q具体通讯的方法则由另外一个对象Transport所提供?/p>

 

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


虽然我们可以定义一个自qTransportQ但是显然不如直接利用现成的Transport方便?/p>


Dojo里提供了(jin)一个同时兼容IE和Firefox的dojo.io.XMLHTTPTransportQ但是这个对象位? dojo.io.BrowserIOQ因此,一般require dojo.io.IOӞq应该require dojo.io.BrowserIO

 

Usage Example:

  dojo.io.bind({
    url: "http://localhost/test.html", //要请求的面地址
    mimetype: "text/html", //h的页面的cdQ应该设|ؓ(f)与你h面cd对应的mimetypeQ默认ؓ(f) "text/plain"
    methodQ?GET", //默认?GET"
    sync: false, //默认为异步执?br>    useCache: false, //默认Z使用面~存Q注意这里的~存q不是浏览器的缓存,而是Dojo自n所l护的页面缓?br>    preventCache: false, //默认为启用浏览器~存Q否则将通过自动增加不同的参数来保览器缓存失?br>    timeoutSeconds: 3000,  //3U后时Q如果ؓ(f)0则永不超?/p>

    encoding: “utf-8″, //默认是ascii

    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("h时Q?); }
  });


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

 

  dojo.io.bind({
    url: "http://localhost/test.html", //要请求的面地址
    mimetype: "text/html", //h的页面的cdQ应该设|ؓ(f)与你h面cd对应的mimetype
    timeoutSeconds: 3000,  //3U后时Q如果ؓ(f)0则永不超?br>    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中指定所用的transportQ则Dojo?x)自动的在已注册的transports中寻找能够处理这个Request的transportQ如果不能找刎ͼ则返回指定的Request。下面是一个指定了(jin)transport的例?


  dojo.io.bind({
    url: "http://localhost/test.html", //要请求的面地址
    mimetype: "text/html", //h的页面的cdQ应该设|ؓ(f)与你h面cd对应的mimetype
    timeoutSeconds: 3000,  //3U后时Q如果ؓ(f)0则永不超?br>    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("h时Q?); }
  });


  你还可以利用bind来得C个JavaScript所定义的对象(注意mimetype必须要定义ؓ(f)"text/javascript"Q?/p>

 

  testObj = dojo.io.bind({
    url: "http://localhost/test.js", //test.js里定义了(jin)一个对?br>    mimetype: "text/javascript", //h的页面的cdQ应该设|ؓ(f)与你h面cd对应的mimetype
    timeoutSeconds: 3000,  //3U后时Q如果ؓ(f)0则永不超?br>    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", //h的页面的cdQ应该设|ؓ(f)与你h面cd对应的mimetype
    timeoutSeconds: 3000,  //3U后时Q如果ؓ(f)0则永不超?br>    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("h时Q?); }
  });

 

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


  dojo.io.bind({
    url: "http://localhost/test.aspx", //要提交的面地址
    mimetype: "text/html", //h的页面的cdQ应该设|ؓ(f)与你h面cd对应的mimetype
    timeoutSeconds: 3000,  //3U后时Q如果ؓ(f)0则永不超?br>    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("h时Q?); }
  });


 

dojo.io.queueBind


  有时Q我们需要一ơ发出多个网请求,则应该用dojo.io.queueBindQ因为浏览器可能只允许同时发出有限个数的hQ如果是使用dojo.io.bind的话Q则有可能会(x)甌不到新的XMLHttp对象而导致出错?br>
  用法与dojo.io.bind是一L(fng)?/p>


 

dojo.io.argsFromMap


  用来把对象{换ؓ(f)URL的参数Ş?br> 
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格式Q否则dojo.string.encodeAsciiq回的编码是很怪异?br>  dojo.io.argsFromMap({a:1,b:2,c:3}, "utf", "c"); //will return "b=2&a=1&c=3"Q最后一个参数可以控制指定名U的值出现在最?br> 

 

dojo.io.setIFrameSrc


  讄IFrame的Src
 
Usage Example:

 

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


 

TODO: 补充一个kwArgs的例子,我之前在|上看见q,可是现在无论如何也找不到相关的页面了(jin)Q只好以后在举例?/p>

 


模块Qdojo.io.BrowserIO

 

基本上就提供?jin)dojo.io.XMLHTTPTransportq个对象


XMLHTTPTransport一般能够满x们的需求,但是其有几个限制Q它不能传输文gQ不能够成功执行跨域名的q程hQƈ且不支持 file:// q样的协?/p>


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

 

dojo.io.IframeTransportQ用法与xmlhttp是一L(fng)Q其优点是可以跨域Q不存在M的安全问?br>如果 Request指定的mimetype是text或javascriptQ返回的内容应该是放在第一个textarea里的内容Q如果指定的 mimetype是htmlQ则IFrame里的html则是需要的内容。因为浏览器兼容的原因,IframeTransport不能正确处理q回cd? XML的请求?/p> 另外要将~码设ؓ(f)全局utf-8,
djConfig = {
  bindEncoding: “utf-8″,
 .....
}






TNT 2007-05-24 15:50 发表评论
]]>
DWRUtil.addOptions questionhttp://www.aygfsteel.com/terrywu/articles/118710.htmlTNTTNTSun, 20 May 2007 09:26:00 GMThttp://www.aygfsteel.com/terrywu/articles/118710.htmlhttp://www.aygfsteel.com/terrywu/comments/118710.htmlhttp://www.aygfsteel.com/terrywu/articles/118710.html#Feedback0http://www.aygfsteel.com/terrywu/comments/commentRss/118710.htmlhttp://www.aygfsteel.com/terrywu/services/trackbacks/118710.htmlcreatorFunction: function(oneTerm)
{
var oneOption = new Option(oneTerm.terminalId+(oneTerm.terminalActive?" Active": ""), oneTerm.terminalId);
oneOption.id='term_'+oneTerm.terminalId;
oneOption.selected=oneTerm.terminalSelected;
}
});

But why the hell use DWRUtil, I'm doing all the work :op

Some maybe like this it would be smarter :

DWRUtil.addOptions(
'coRegulateurList_tbody', TermList, {
idFunction: function(oneTerm)
{
return 'term_' +oneTerm.terminalId;
},
selectedFunction:function(oneTerm)
{
return oneTerm.terminalSelected;
},
textFunction:function(oneTerm)
{
return oneTerm.terminalId+(oneTerm.terminalActive?" Active" :"");
}
});


TNT 2007-05-20 17:26 发表评论
]]>
dojo 控制DIV http://www.aygfsteel.com/terrywu/articles/118271.htmlTNTTNTFri, 18 May 2007 02:35:00 GMThttp://www.aygfsteel.com/terrywu/articles/118271.htmlhttp://www.aygfsteel.com/terrywu/comments/118271.htmlhttp://www.aygfsteel.com/terrywu/articles/118271.html#Feedback0http://www.aygfsteel.com/terrywu/comments/commentRss/118271.htmlhttp://www.aygfsteel.com/terrywu/services/trackbacks/118271.html<div><input type="button" value="wipeOut" onclick="wipeOut('subBlogListDiv')"/></div>
<div><input type="button" value="wipeIn"  onclick="wipeIn('subBlogListDiv')"/></div>
<div><input type="button" value="fadeOut"  onclick="fadeOut('subBlogListDiv')"/></div>
<div><input type="button" value="fadeIn"  onclick="fadeIn('subBlogListDiv')"/></div>
<div><input type="button" value="opacity"  onclick="opacity('subBlogListDiv')"/></div>
<div><input type="button" value="highlight"  onclick="highlight('subBlogListDiv')"/></div>
<div><input type="button" value="explode"   onclick="dojo.lfx.explode(this, 'subBlogListDiv', 300).play();"/></div>
<div><input type="button" value="implode"   onclick="dojo.lfx.implode( 'subBlogListDiv', this,300).play();"/></div>
<div><input type="button" value="slidTo"  onclick="dojo.lfx.html.slideTo(document.getElementById('testM'), [400, 700], 5000).play();"/></div>
<div><input type="button" value="slidBy"  onclick="dojo.lfx.html.slideBy(document.getElementById('testM'), [0, 0], 5000).play();"/></div>



<sciprt>
   //highlight(高亮度標C?、Wipe(捲v、張?、Fade(淡出、E?、Explode(跛_)、Implode(收回)、Slide(滑動);
     function wipeOut(elId){   
         dojo.lfx.wipeOut(elId, 300).play();   
     }   
     function wipeIn(elId) {   
         dojo.lfx.wipeIn(elId, 300).play();   
     }   
     function fadeOut(elId){   
        dojo.lfx.html.fadeOut(elId, 300).play();   
     }   
     function highlight(elId){   
             dojo.lfx.html.highlight(elId, [255,255,0], 2000, 5000).play();
      }   
     function fadeIn(elId){   
        dojo.lfx.html.fadeIn(elId, 300).play();   
     }   
     function opacity(elId){   
        dojo.html.setOpacity(elId, 0.5);   
     }   
</script>



TNT 2007-05-18 10:35 发表评论
]]>
վ֩ģ壺 | | | »| | | | | | | ذ| Ϸ| ɽ| | Ͷ| ɽ| | ɽ| | ܿ| | ۩| | | | | ΢| Ĵʡ| Ƶ| ɽ| | »| ɿ| IJ| ֯| Ӵ| | | ƺ| ̫| |