チェックボックスと文字列、スライダーで構成されたコンポーネントを作ってみました。
今まで同様WAComponentから継承しても作れますが、
rendererClass
^ WARenderCanvas
としてやらないとダメなようです。Seaside2.7からデフォルトのレンダラクラスがWARenderCanvasになるというのも、scriptaculousからみか?まぁWARenderCanvasなら、ギシギシhtmlソースみたいにならないので、個人的にはいい方向のような気がする。
実際のソースはこんな感じです。サンプルをほとんどそのままなので、まぁあまり参考になりませんが、赤文字部分がいわゆるAjaxとかいうものを使う、まじないですね。
renderContentOn: html
ckboxId formId trackId handleId positionId |
ckboxId := 'checkbox'.
formId := 'form'.
trackId := 'track'.
handleId := 'handle'.
positionId := 'position'.
super renderContentOn: html.
html div id: 'jobitem';
with: [html form id: formId;
with: [html checkbox
value: status;
callback: [:
value | status :=
value];
onClick: (html
updater id: ckboxId;
triggerForm: formId;
callback: [:r | r render: status])].
html text: item.
html div id: trackId;
with: [html div id: handleId].
html div id: positionId;
with: position.
html script: (html slider handleId: handleId;
trackId: trackId;
value: position;
range: (0 to: 100);
onSlide: (html
updater id: positionId;
triggerSliderCallback: [:
value | position :=
value asInteger];
callback: [:render | render render: position]))]