只要在DWR里用到马歇尔(marshall),engine.js是必须的.他生成了javascript函数的通用接口.
所有DWR页面都需要下列的脚本元素来导入主要的DWR引擎.
<script type='text/javascript'
src='/[YOUR-WEB-APP]/dwr/engine.js'>
</script>
选项索引
下列选项都是可行的.通过运用DWREngine.setX()函数来设置全局的或者运用{ timeout:500,
callback:myFunc}来设置调用或批调用.
Option Global Batch Call
timeout 1.0 1.1 -
errorHandler 1.0 - 1.1
preHook 1.0 1.1 1.1
postHook 1.0 1.1 1.1
method 1.0 1.1 -
verb 1.0 1.1 -
async 1.1 1.1 -
ordered 1.0 - -
warningHandler 1.0 - 1.1
callback - - 1.0
skipBatch 1.0* 2.0? -
onBackButton 2.0? 2.0? -
onForwardButton 2.0? 2.0? -
(*表示没有setSkipBatch(),而是用beginBatch()和endBatch()来控制的)
Errors, Warnings and Timeouts
--Handling Errors and Warnings
DWR总是会有一些错误,通过errorHandler,或warningHandler来显示错误信息.
这些方法可以以弹出警告框,或状态提示的方式显示错误信息.
用DWREngine.setErrorHandler(function)来提示错误,DWREngine.setWarningHandler(function)提示警告.
Setting Timeouts
DWREngine.setTimeout() 允许你为所有的DWR调用设置超时值(默认值是0),单位是毫秒.如果超时调用发生那么适当的错误处理就被调用.
例子:
Remote.method(params, {
callback:function(data){ alert("it worked"); },
errorHandler:function(message){ alert("it broke"); },
timeout:1000
});
如果Remote.method()执行时间超过了1秒,那么就会显示"it broke".
Call Batching(批调用)
你可以把远程调用组合起来作为批调用,这样就节省了往返于服务器间的时间,也很少涉及到延时了. 批调用由DWREngine.beginBatch() 开始,DWREngine.endBatch()结束.当调用了endBatch()时批远程调用就结束了.所以DWR就在服务器上执行他们一次. DWR确保了所有的回调被调用,所以你可以透明地返回批开启或结束.不要忘了调用endBatch() 否则你的远程调用将永远在队列里.
警告:
当然批调用是有副效应地,他不可能是同步地,也不能同时进行批调用. 所有地调用就像个钩子(hooks),比起单一的调用,批调用调用timeouts和errorHandlers的次数更多. 如果一个批调用中有两个不同timeout值的调用,那么所有至少是后一个将被忽略.
Call Ordering(分类调用)
只要AJAX的异步远程调用不能分类返回我们发送的东西的时候,DWREngine.setOrdered(boolean),(默认是false)允许我们请求我们发送的数据的精确分类.通过当老的请求完成时发送新的请求DWR能做到这点.
警告:
当为true的时候,你的应用会慢下来,如果信息丢失客户浏览器会反应迟钝.
Remoting Hooks
我们来看看DWREngine.setPreHook(function)和DWREngine.setPostHook(function). 如果你想在在DWR远程调用前被警告,你可以设置pre-hook函数.他会被无参地调用.这个Hook很有用,如果你想禁止某些组件在返回前被再次试用. Post execute hooks 通常被用来和pre-execute hooks 一起协调工作,或取消由pre-execute hooks执行的修改. 了解他们请看DWRUtil.useLoadingMessage()函数
Remoting Options
DWR怎样处理远程调用有很多选项,方法和动作能传输给用户,但是有不同的浏览器副作用.通常DWR会选择合适的方法给你,但是这些选项会有不必要的副作用. DWREngine.setMethod(newmethod)这个方法不一定会被执行,我们只是首先来试试看.newmethod必须是DWREngine.XMLHttpRequest 或DWREngine.IFrame.DWREngine.setVerb(verb)允许你选择post或get为XMLHttpRequest和IFrame.一些浏览器不支持XHR-POST,DWR会切换到get,即使设置了post. DWREngine.setAsync(flag)我们想让XHR对象异步吗?默认是true.
警告:如果你用了iframes,这个可能会被忽略.不推荐设置为false,这会使你的浏览器慢下来,如果你必须这样做,那么请设置一个timeout.