TActiveButton

TActiveButton is the active control counter part to TButton. When a TActiveButton is clicked, rather than a normal post back request a callback request is initiated. The OnCallback event is raised during a callback request and it is raised after the OnClick event.
TActiveButtonはTButtonへのアクティブコントロールカウンターパートです。 TActiveButtonがクリックされる時には、ポストバックリクエストよりも、コールバックリクエストが開始されます。OnCallbackイベントはコールバックリクエストの間に発生して、OnClickイベントの後で発生します。
When the ActiveControl.EnableUpdate property is true, changing the Text property during a callback request will update the button's caption on the client-side.
ActiveControl.EnableUpdateプロパティがtrueの時に、コールバックリクエストの間にTextプロパティを変更することは、クライアント側のボタンのキャプション(表題)を更新します。
Since the OnCallback event is raised only during a callback request, the OnCallback event handler can be used to handle logic specifically related to callback requests. The OnClick event handler is raised when ever the button is clicked, even if javascript is disabled.
OnCallbackイベントがコールバックリクエストの間だけに発生するので、OnCallbackイベントハンドラは、コールバック要求と特に関連したロジックを処理するために使われることができます。 たとえjavascriptが使用不可にされても、ボタンが押されたときは常に、OnClickイベントハンドラが発動します。
  • TActiveButton クラスの概略図
    #ref(): ERROR: File not found: "TActiveButtonClass.png" at page "PRADO/コントロール/ActiveControls/TActiveButton"
    The class diagram for TActiveButton is illustrated in the figure below. Most active control that can perform callback request have a similar structure.
TActiveButtonのためのクラス図は以下のとおり図解されます。コールバックリクエストを実行することができるほとんどのアクティブコントロールは同様の構造を持っています。
TActiveButton is an extension of TButton and implements two additional interfaces ICallbackEventHandler and IActiveControl. The TActiveButton contains an instance of TBaseActiveCallbackControl available through the ActiveControl property of TActiveButton. The following example set the callback parameter of the TActiveButton when a callback request is dispatched.
TActiveButtonはTButtonの拡張であり、2つの追加のインタフェースICallbackEventHandlerとIActiveControlを継承しています。 TActiveButtonはActiveControlプロパティによって使用可能となるTBaseActiveCallbackControlのインスタンスを含んでいます。以下の例は、コールバックリクエストが送信される時に、TActiveButtonのコールバックパラメータを設定しています。
<com:TActiveButton
 Text="Click Me"
 OnCallback="button_callback"
 ActiveControl.CallbackParameter="value" />
In the OnCallback event handler method, the CallbackParameter is available in the $param object.
OnCallbackのイベントハンドラメソッドにおいて、CallbackParameterは$paramオブジェクトで使用可能です。
public function button_callback($sender, $param)
{
 echo $param->CallbackParameter; //outputs "value"
}

クライアントサイドの動作の追加

With in the ActiveControl property is an instance of TCallbackClientSide available as a property ClientSide of TActiveButton. The ClientSide property contains sub-properties, such as RequestTimeOut, and client-side javascript event handler, such as OnLoading, that are used by the client-side when making a callback request. The following example demonstrates the toggling of a "loading" indicator when the client-side is making a callback request.
プロパティを、TActiveButtonのClientSideとして使用できるTCallbackClientSideのインスタンスが、ActiveControlプロパティの中にあります。 ClientSideプロパティは、コールバックリクエストを行う際に、クライアント側によって使われるRequestTimeOutと OnLoadingなどのクライアント側のjavascriptイベントハンドラといったサブプロパティを含んでいます。以下の例は、クライアント側がコールバックリクエストを行っている時に、”Loading・・・" の表示を行うスイッチをつけているものです。
<com:TClientScript PradoScripts="effects" />
 <span id="callback_status">Loading...</span>
  <com:TActiveButton
   Text="Click Me"
   OnCallback="button_callback"
   ActiveControl.CallbackParameter="value" >
   <prop:ClientSide
    OnLoading="Element.show('callback_status')"  
    OnComplete="Element.hide('callback_status')" />
  </com:TActiveButton>
The example loads the "effects" javascript library using the TClientScript component. The ClientSide.OnLoading property value contains javascript statement that uses the "effects" library to show the "Loading..." span tag. Similarly, ClientSide.OnComplete property value contains the javascript statement that hides the "Loading..." span tag. See TCallbackClientSide for further details on client-side property details.
上記の例は、TClientScriptコンポーネントを使って、”effect”javascriptライブラリをロードします。 ClientSide.OnLoading プロパティの値は、"loading・・・"spanタグを示すために、"effects"ライブラリを使うjavascriptステートメントを含んでいます。 同様に、ClientSide.OnCompleteプロパティは、"Loading…"span タグを隠すjavascriptステートメントを含んでいます。 クライアント側のプロパティについてのさらなる詳細はTCallbackClientSideを見てください。

TRY & エラー

TRY & エラー で実行したページは http://felix-labo.org/myprado/?page=ActiveControlsSample
サンプルで分かるとおり、TButton と同様の機能があり、アクティブに動作します。中に以下のものがありました。
 <com:TActiveButton
  Text="click me"
  OnCommand="buttonClicked"
  CommandName="test"
  ActiveControl.CallbackParameter="value"
  CommandParameter="value"
  OnCallback="buttonCallback"
 />
TButton の例では、4,6行目の CommandName CommandParameter が OnCommand イベントハンドラに呼ばれて、読み込まれていました、今回のものは、4行名のCommandNameは、そのまま表示されますが、parameter の方は、6行目のCommandParameter の値である "value”が読み込まれた後、OnCallback イベントに設定された、 buttonCallback メソッドが適用されている様で、”Param:value using Callback” とボタンに表示されています。
サンプル以外には、上記の例の ClientSideスクリプトを試してみました。なかなか使えそうなのですが、はじめにロードしたときにも "Loading"と表示されてしまうのを何とかしたかったのですが、ちょっとやった感じではだめでした。TClientScript と TCallbackClientSide あたりをじっくり取り組まないとだめなんでしょうね。(これは近いうちに・・・?)