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が呼ばれるようになります。