全局选项(在单次调用或者批量调用中不可用)
Option orderedGlobal Batch Call 1.0 2.0 2.0 - - - - - - Summary DWR是否支持顺序调用 选择xhr或者iframe的反转Ajax 是否查找inbound调用 pollType reverseAjax 废弃的选项
Option Global Batch Call verb method 1.0 1.0 1.1 1.1 Summary 1.1 2.0废弃。使用'httpMethod'代替 1.1 2.0废弃。使用'rpcType'代替 将来的
Option onBackButton Global Batch Call 2.1? 2.1? 2.1? - - Summary 用户按了back按钮后的动作 用户按了forward按钮的动作 onForwardButton 2.1? 远程调用选项
DWR有一些选项用来控制远程调用的处理方式。method和verb对于用户应该时透明的,但是不同的浏览器效果的可能不一样。一般来说DWR会选择正确方法来处理,但是这些选项对于在不同效果的浏览器之间开发很有用。
DWREngine.setAsync(flag)
DWR1.0不支持。
我们指定让XHR异步调用了吗? 默认为true。警告如果你使用的时IFrame或者ScriptTag这一选项被忽略。一般来说把他变成false是个糟糕的做法。因为那样会使你的浏览器变慢。 要设置全局同步机制:
DWREngine.setAsync(true); 或者设置单次调用同步: Remote.method(params, {
callback:function(data) { ... }, async:true });
或者在batch里面: DWREngine.beginBatch();
Remote.method1(params, callback1); Remote.method2(params, callback2); DWREngine.endBatch({ async:true });
DWREngine.setMethod(newmethod)
用来设置恰当的方法。setMethod()不能把正使用你选择的方法,它只是保证首先尝试使用那个方法。newmethod必须是DWREngine.XMLHttpRequest或者DWREngine.IFrame,或者2.0以后的DWREngine.ScriptTag。
XMLHttpRequest时默认的,并且大多情况下可用。当ActiveX禁用IFrame就有用了,尽管DWR能自动检测出这种情况并切换到IFrame。当你要突破跨域调用的限制,ScriptTag就很有用了。
例如,要设置全局的远程调用方法:
DWREngine.setMethod(DWREngine.IFrame); 或者单次调用:
Remote.method(params, {
callback:function(data) { ... }, method:DWREngine.IFrame });
或者批量调用:
DWREngine.beginBatch();
Remote.method1(params, callback1);
Remote.method2(params, callback2); DWREngine.endBatch({ method:DWREngine.IFrame });
DWREngine.setVerb(verb)
这个选项允许你选择POST和GET,无论时用iframe还是XMLHttpRequest方法。一些浏览器(例如,旧版的Safari)不支持XHR-POST所以DWR就自动切换到GET,即使你设置POST为verb。所以setVerb()应当被仅仅做为一个堤示。 如果使用ScriptTag来远程调用,设置verb时没有的。 例如,设置全局远程调用的verb: DWREngine.setVerb(\); 设置单次调用:
Remote.method(params, {
callback:function(data) { ... }, verb:\ });
设置批量调用:
DWREngine.beginBatch();
Remote.method1(params, callback1); Remote.method2(params, callback2); DWREngine.endBatch({ verb:\ }); 保证的责任
DWR的目的是让你确切的知道所有调用的动作。知道了浏览器存在的bug,这是可以做到了。
如果你设置了callback, exceptionHandler, errorHandler, warningHandler 和 textHtmlHandler,DWR就应该 总是 为每一个请求提供响应。
util.js: 帮你使用从服务器取来的数据改变页面(还有一些灵巧的小功能)
util.js包含了一些工具函数来帮助你用javascript数据(例如从服务器返回的数据)来更新你的web页面。
你可以在DWR以外使用它,因为它不依赖于DWR的其他部分。你可以下载整个DWR或者单独下载.
4个基本的操作页面的函数:getValue[s]()和setValue[s]()可以操作大部分HTML元素除了table,list和image。getText()可以操作select list。
要修改table可以用addRows()和removeAllRows()。要修改列表(select列表和ul,ol列表)可以用addOptions()和removeAllOptions()。
还有一些其他功能不是DWRUtil的一部分。但它们也很有用,它们可以用来解决一些小问题,但是它们不是对于所有任都通用的。
$()
$() 函数(它是合法的Javascript名字) 是从Protoype偷来的主意。大略上的讲: $ = document.getElementById。 因为在Ajax程序中,你会需要写很多这样的语句,所以使用 $() 会更简洁。
通过指定的id来查找当前HTML文档中的元素,如果传递给它多个参数,它会返回找到的元素的数组。所有非String类型的参数会被原封不动的返回。这个函数的灵感来至于prototype库,但是它可以在更多的浏览器上运行。 可以看看DWRUtil.toDescriptiveString的演示。
从技术角度来讲他在IE5.0中是不能使用的,因为它使用了Array.push,尽管如此通常它只是用来同engine.js一起工作。如果你不想要engine.js并且在IE5.0中使用,那么你最好为Array.push找个替代品。
util.js: 生成列表(addOptions and removeAllOptions())
DWR的一个常遇到的任务就是根据选项填充选择列表。下面的例子就是根据输入填充列表。
下面将介绍 DWRUtil.addOptions() 的几种是用方法。
如果你希望在你更新了select以后,它仍然保持运来的选择,你要像下面这样做: var sel = DWRUtil.getValue(id); DWRUtil.removeAllOptions(id);
DWRUtil.addOptions(id, ...); DWRUtil.setValue(id, sel);
如果你想加入一个初始的\选项那么你可以直接加入下面的语句: DWRUtil.addOptions(id, \\[\]); 然后再下面紧接着加入你真正的选项数据。 DWRUtil.addOptions有5种模式
数组: DWRUtil.addOptions(selectid, array) 会创建一堆option,每个option的文字和值都是数组元素中的值。
对象数组 (指定text): DWRUtil.addOptions(selectid, data, prop) 用每个数组元素创造一个option,option的值和文字都是在prop中指定的对象的属性。
对象数组 (指定text和value值): DWRUtil.addOptions(selectid, array, valueprop, textprop) 用每个数组元素创造一个option,option的值是对象的valueprop属性,option的文字是对象的textprop属性。
对象: DWRUtil.addOptions(selectid, map, reverse)用每个属性创建一个option。对象属性名用来作为option的值,对象属性值用来作为属性的文字,这听上去有些不对。但是事实上却是正确的方式。如果reverse参数被设置为true,那么对象属性值用来作为选项的值。
对象的Map: DWRUtil.addOptions(selectid, map, valueprop, textprop) 用map中的每一个对象创建一个option。用对象的valueprop属性做为option的value,用对象的textprop属性做为option的文字。
ol 或 ul 列表: DWRUtil.addOptions(ulid, array) 用数组中的元素创建一堆li元素,他们的innerHTML是数组元素中的值。这种模式可以用来创建ul和ol列表。
util.js: 生成Table(addRows and removeAllRows )
DWR通过这两个函数来帮你操作table: DWRUtil.addRows() 和 DWRUtil.removeAllRows() 。这个函数的第一个参数都是table、tbody、thead、tfoot的id。一般来说最好使用tbody,因为这样可以保持你的header和footer行不变,并且可以防止Internet Explorer的bug。
DWRUtil.removeAllRows()
语法:
DWRUtil.removeAllRows(id);