Sunday, June 11, 2006

Tapestry4 customize component

วันนี้นั่งเขียน custom component ทั้งวัน
ช่วงแรกๆนี่ฝันร้ายเลย
(ฝันร้ายจริงๆ ไม่ใช่คำเปรียบเปรย
เพราะงีบหลับกลางวันไป โดยในฝันมีแต่
source code ของ tapestry เต็มไปหมด
จนงงเลยว่าอันไหนเป็น source ที่เราเห็นจริงๆ
อันไหนเป็นอันที่จิตนาการเห็นในฝัน
)
โจทย์มีอยู่ว่า ต้องการให้ทำ ajax กรณีที่มี
การเปลี่ยนแปลง ข้อมูลใน textfield
ดูเหมือนง่ายๆ ถ้าใน rails ก็กระดิกนิ้วไม่กี่บรรทัด ก็ได้ ajax แล้ว
  <tr>
<td width="25%">เลขที่บัญชี :</td>
<td colspan='3'><%= text_field 'rec_no', 'firm_acct', :size => 10 %><span id="firm_name"></span>
</td>
</tr>
<%= observe_field('rec_no_firm_acct', :url => {:action => 'firm_entry'}) %>


ส่วน tapestry ก็มี Ajax Library component ที่ชื่อ Tacos
ซึ่งใช้ได้ดีเลยแหล่ะ
แต่ไม่ตรงกับ use case ที่จะใช้ั
ก็เลยเดือนร้อนต้องหาทางเขียน component ขึ้นมาเอง
โดยพยายาม reuse code เก่าของ Tacos ให้มากที่สุด

ความยากของ tapestry component อยู่ที่ต้องเข้าใจ model การทำงานภายใน
ซึ่งมี learning curve ที่สูงใช้ได้เลย
ต้อง debug ไล่ code กันหลายรอบ กว่าจะเห็นภาพว่า
เกิดอะไรขึ้นข้างใน tapestry บ้าง

เอารูป prototype มาให้ดูเล่นๆแล้วกัน
อันนี้ยังไม่ลงเส้นทางที่ต้องไปผ่าน javascript,
ไม่รวมเส้นทางภายในของ tapestry เอง,
กับยังมองไม่เห็นการเชื่อมโยงกับ html ที่เกิดขึ้น
อธิบายไม่ไหว รายละเอียดมันเยอะ

Related link from Roti

No comments: