【PB.NET编程系列6】利用JavaScript进行客户端编程

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

缺省的JavaScript事件

当我们发布程序时文件PBDataWindow.js 会拷贝到服务器applicationName\Scripts目录下,在这个文件里定义了一些缺省事件供我们调用。调用这些缺省的事件将会导致一次postback或延时的postbak,也有些事件不产生postback,面的列表列出了这些事件和差别。在前面的例子中我们使用类似dw_1.OnClient事件名 = "自定义JS函数"这样的代码接管了对应的DW对应事件的代码,写在DW对应事件里的代码将不会再被调用,如果我们想重新触发这些代码,就必需使用下表的JavaScript事件了,调用这些事件时必需使用和DATAWINDOW的客户端事件相同的参数。

 

Client-side Event Default JavaScript handler (postback action) Used under the following conditions for server-side events:
Clicked PBDataWindow_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 handled
RButtonDown PBDataWindow_RButtonDown (postback) RButtonDown is handled
ButtonClicked PBDataWindow_ButtonClicked (postback) ButtonClicked is handled and/or ButtonClicking is handled
ButtonClicking PBDataWindow_ButtonClicking (postback) ButtonClicked is handled and/or ButtonClicking is handled
ItemFocusChanged PBDataWindow_ItemFocusChanged (postback) ItemFocusChanged is handled
PBDataWindow_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  
ItemError PBDataWindow_ItemError (no postback) ItemChanged is handled and/or ItemError is handled
ItemChanged PBDataWindow_ItemChangedReject (no postback) ItemChanged is handled
RowFocusChanged

 

PBDataWindow_RowFocusChanged (postback) RowFocusChanging is handled, but ItemFocusChanged is not
   

下表列出了Web DataWindow在客户端支持的事件列表,要使用这些事件需要在前面加前缀"OnClient"

Event Arguments Return Codes
ButtonClicked sender, rowNumber, buttonName 0 – Continue processing
ButtonClicking sender, rowNumber, buttonName 0 – Execute action assigned to button, then trigger ButtonClicked

1 – Do not execute action or trigger ButtonClicked

Clicked sender, rowNumber, objectName 0 – Continue processing1 – Prevent focus change
DoubleClicked sender, rowNumber, objectName 0 – Continue processing1 – Prevent focus change
ItemChanged sender, rowNumber, columnName, newValue 0 – Accept data value

1 – Reject data value and prevent focus change

2 – Reject data value but allow focus change

ItemError sender, rowNumber, columnName, newValue 0 – Reject data value and show error message

1 – Reject data value with no error message

2 – Accept data value

3 – Reject data value but allow focus change

ItemFocusChanged sender, rowNumber, columnName 0 – Continue processing
RButtonDown sender, rowNumber, objectName 0 – Continue processing1 – Prevent focus change
RowFocusChanged sender, newRowNumber 0 – Continue processing
RowFocusChanging sender, currentRowNumber, newRowNumber 0 – Continue processing

1 – Prevent focus change

posted @ 2009-08-03 00:31  阿乌  阅读(1584)  评论(0编辑  收藏  举报