jQueryプラグインで作成した部品でサーバ通信がしたい(2)
昨日(id:sikakura:20100810)のエントリの続きです。
コレクションの送信の場合、defaultGetterに設定してあるgetValue()にて以下のように配列を返却するように設定します。
getValue: function() { var arr = []; arr.push( { name : "takahashi" } ); arr.push( { name : "aoki" } ); arr.push( { name : "suzuki" } ); return arr; }
すると、以下のようなXML電文が生成されます。
<?xml version="1.0" encoding="UTF-8"?> <request> <rows> <SearchTest><name>takahashi</name></SearchTest> <SearchTest><name>aoki</name></SearchTest> <SearchTest><name>suzuki</name></SearchTest> </rows> </request>
もちろん、これはイベント定義XMLに以下のように設定してある前提です。
<component id="cal"> <event id="onclick" remoteUrl="testServlet" async="false" > <param rootNode="request"> <source obj="cal" node="rows" childNode="SearchTest"> <bind node="name" fromkey="name"/> </source> </param> </event> </component>
さて、これでサーバとの通信が可能になるのですが、この仕様だと1つのコンポーネント(上の例だとカレンダ部品)に対して
1つのdefaultGetterしか使用できないという制約があることになっていまいます。上の例では、カレンダ部品(id="cal")に対して
onclickという1つのイベントしか定義していませんが、実際は複数のイベントが定義できます。
ある送信に対して、別のメソッドを利用するために、sourceタグの属性[teleType]を指定します。
逆に、ある受信に対して、別のメソッドを利用するために、targetタグにも属性[teleType]は指定できます。
teleType適用後のイベント定義XML
<component id="cal"> <event id="onclick" remoteUrl="testServlet" async="false" > <param rootNode="request"> <source obj="cal" node="rows" childNode="SearchTest" teleType="getArrayVal"> <bind node="name" fromkey="name"/> </source> </param> </event> <event id="onDblclick" remoteUrl="testServlet" async="false" > <param rootNode="request"> <source obj="cal" node="name" teleType="getSingleVal"> </param> </event> </component>
上のようにすると、onclick時にはgetArrayValが呼ばれ、onDblclick時にはgetSingleValが呼ばれるようになります。