普通WEB程序是由浏览器发出请求,服务器以HTML形式返回结果。一般情况下我们在PB的事件里编写的任何对客户端事件的响应代码都会产生一次与服务器的交互过程:当一个客户端事件被触发时,JavaScript中有一个对应的事件去向服务器发起请求,服务器端会调用对应事件的代码并将结果返回给客户端,对于客户来说一个直接的感观就是屏幕被刷新了一次。为了减少这样的postback,我们可以利用JavaScript对客户端进行编程以提高WEB程序的性能和用户体验。
要对客户端事件进行编程,必需将我们的代码包含在一个条件编译的代码块里面,编译器会识别并与普通power script代码区分开来。在自定义的JavaScript事件里可以通过使用调用Document.Form.Submit或PB缺省的已定义事件来接管被触发的事件。
下面的例子通过一个自定义的客户端JavaScript事件代码来取代DATAWINDOW的ItemChanged事件,这段代码的意思是如果是第一列或第二列的值被改变,那么调用缺省的JavaScript事件PBDataWindow_ItemChangedReject来取消值的改变。在这个例子里缺省事件将不会产生postback,如果不是第一和第二列将不会触发客户端代码。
//Start MyScriptFile.js function MyItemChanged(sender, rowNumber, columnName, newValue) { if(columnName == "column1" || columnName == "column2") { // The default function is invoked return PBDataWindow_ItemChangedReject(sender, rowNumber, columnName, newValue) } else { //do nothing } } //End MyScriptFile.js接管的JavaScript事件写在一个条件编译代码块里:
#IF DEFINED PBWEBFORM THEN dw_1.JavaScriptFile = "MyScriptFile.js" dw_1.OnClientItemChanged = "MyItemChanged" #END IF当我们发布程序时文件PBDataWindow.js 会拷贝到服务器applicationName\Scripts目录下,在这个文件里定义了一些缺省事件供我们调用。调用这些缺省的事件将会导致一次postback或延时的postbak,也有些事件不产生postback,面的列表列出了这些事件和差别。在前面的例子中我们使用类似dw_1.OnClient事件名 = "自定义JS函数"这样的代码接管了对应的DW对应事件的代码,写在DW对应事件里的代码将不会再被调用,如果我们想重新触发这些代码,就必需使用下表的JavaScript事件了,调用这些事件时必需使用和DATAWINDOW的客户端事件相同的参数。
Client-side EventDefault JavaScript handler (postback action)Used under the following conditions for server-side events:ClickedPBDataWindow_Clicked (postback)Clicked is handled, but DoubleClicked is not Clicked and ButtonClicked are handled, but DoubleClicked is not Clicked and ButtonClicking is handled, but DoubleClicked is not PBDataWindow_DelayedClicked (delayed postback)Clicked and DoubleClicked are handled Clicked, DoubleClicked, and ButtonClicked are handled Clicked, DoubleClicked, and ButtonClicking are handled PBDataWindow_ClickedDifferentRow (postback)RowFocusChanging is handled, but Clicked and DoubleClicked are not RowFocusChanged is handled, but Clicked and DoubleClicked are not PBDataWindow_DelayedClickedDifferentRow (delayed postback)RowFocusChanging and DoubleClicked are handled, but Clicked is not RowFocusChanged and DoubleClicked are handled, but Clicked is not DoubleClicked PBDataWindow_DoubleClicked (postback)DoubleClicked is handledRButtonDownPBDataWindow_RButtonDown (postback)RButtonDown is handledButtonClickedPBDataWindow_ButtonClicked (postback)ButtonClicked is handled and/or ButtonClicking is handledButtonClickingPBDataWindow_ButtonClicking (postback)ButtonClicked is handled and/or ButtonClicking is handledItemFocusChangedPBDataWindow_ItemFocusChanged (postback)ItemFocusChanged is handledPBDataWindow_ItemFocusChanged_AND_ItemChanged_OR_ItemError (postback)ItemChanged and ItemError are handled, but ItemFocusChanged is not PBDataWindow_ItemFocusChanged_AND_ItemChanged (postback)ItemChanged is handled, but ItemFocusChanged and ItemError are not PBDataWindow_ItemFocusChanged_AND_ItemError (postback)ItemError is handled, but ItemChanged and ItemFocusChanged are not ItemErrorPBDataWindow_ItemError (no postback)ItemChanged is handled and/or ItemError is handledItemChangedPBDataWindow_ItemChangedReject (no postback)ItemChanged is handledRowFocusChanged
PBDataWindow_RowFocusChanged (postback)RowFocusChanging is handled, but ItemFocusChanged is not
下表列出了Web DataWindow在客户端支持的事件列表,要使用这些事件需要在前面加前缀"OnClient"
EventArgumentsReturn CodesButtonClickedsender, rowNumber, buttonName0 – Continue processingButtonClickingsender, rowNumber, buttonName0 – Execute action assigned to button, then trigger ButtonClicked1 – Do not execute action or trigger ButtonClicked
Clickedsender, rowNumber, objectName0 – Continue processing1 – Prevent focus changeDoubleClickedsender, rowNumber, objectName0 – Continue processing1 – Prevent focus changeItemChangedsender, rowNumber, columnName, newValue0 – Accept data value1 – Reject data value and prevent focus change
2 – Reject data value but allow focus change
ItemErrorsender, rowNumber, columnName, newValue0 – Reject data value and show error message1 – Reject data value with no error message
2 – Accept data value
3 – Reject data value but allow focus change
ItemFocusChangedsender, rowNumber, columnName0 – Continue processingRButtonDownsender, rowNumber, objectName0 – Continue processing1 – Prevent focus changeRowFocusChangedsender, newRowNumber0 – Continue processingRowFocusChangingsender, currentRowNumber, newRowNumber0 – Continue processing1 – Prevent focus change
转载于:https://www.cnblogs.com/newskysoft/archive/2009/08/03/1537209.html
相关资源:JAVA上百实例源码以及开源项目