โดโจทูลคิต

โดโจทูลคิต ( เขียนตามสไตล์เป็น dōjō toolkit) เป็น โอเพนซอร์ส DHTML ทูลคิท ที่เขียนด้วยจาวาสคริปต์ ช่วยในการพัฒนาเอแจ็กซ์ในเว็บแอปพลิเคชัน ริเริ่มโดย อเล็กซ์ รัสเสล (Alex Russell) ใน พ.ศ. 2547 ภายใต้การดูแลของมูลนิธิโดโจ (Dojo Foundation) มีสัญญาอนุญาต 2 แบบให้เลือกใช้ ได้แก่ สัญญาอนุญาต BSD และ สัญญาอนุญาต Academic Free มูลนิธิโดโจเป็นองค์กรไม่แสวงหาผลประโยชน์มีวัตถุประสงค์เพื่อส่งเสริมการนำทูลคิทนี้ไปใช้งาน

ความสามารถ

เครื่องมือในหน้าเว็บเพจ (Widgets) 
Dojo widgets เป็นเครื่องมือต่างๆในหน้าเว็บเพจ เขียนเป็นโค้ดสำเร็จรูปโดยใช้ JavaScript, HTML และ CSS
สนับสนุนการทำงานบนหลายเบราว์เซอร์ที่แพร่หลายในปัจจุบัน ช่วยให้เว็บเพจตอบโต้กับผู้ใช้ได้น่าสนใจ และพัฒนาง่ายขึ้น
ตัวอย่างของเครื่องมือใน Dojo widgets เช่น
 Menu, Tab และ Tooltips
 ตารางปรับการเรียงลำดับใหม่ได้, แผนภาพแบบไดนามิก และ ตัวช่วยในการสร้างภาพเวกเตอร์
 การทำ Effects ต่างๆ เช่น fades, wipes และ slides, และตัวช่วยในการสร้าง effects แบบต่างๆ
 Tree ที่สนับสนุนการ drag-n-drop
 แบบฟอร์ม และ ฟังก์ชันในการตรวจสอบความถูกต้องของแบบฟอร์ม
 Date selector, Time selector ในรูปของปฏิทิน และ นาฬิกา
 Rich Text Editor

การสื่อสารแบบไม่ต่อเนื่อง (Asynchronous communication) 
หนึ่งในความสามารถหลักของ เอแจ็กซ์ แอปพลิเคชัน คือ การสื่อสารแบบไม่ต่อเนื่อง (Asynchronous communication) ของ เบราว์เซอร์ กับทางฝั่งเซิร์ฟเวอร์
กล่าวคือ สามารถส่งถ่ายและแสดงผลข้อมูลไปพร้อมๆกันโดยไม่ต้องรีโหลดทั้งหน้าใหม่หมด.
ปกติแล้วการทำเช่นนี้จะต้องเรียกใช้ XMLHttpRequest ใน JavaScript
ซึ่งในแต่ละเบราว์เซอร์ จะมีวิธีการเรียกใช้ที่แตกต่างกันอยู่เล็กน้อย.
Dojo นำการจัดการพื้นฐาน เรื่องเกี่ยวกับข้อผิดพลาด, ปัญหาการใช้งานเกี่ยวกับปุ่ม "ย้อนกลับ", ปัญหาในการคั่นหน้า (Bookmark) และความแตกต่างระหว่างเบราว์เซอร์
ของการเรียกใช้ XMLHttpRequest รวมให้เรียกผ่าน dojo.io.bind เหมือนกันทั้งหมดแทน
ซึ่งสามารถปรับให้ใช้วิธีอื่นนอกจาก XMLHttpRequest ได้ด้วย (เช่น การเรียกผ่าน IFrames ที่ซ่อนไว้แทน).

ระบบจัดการแพ็จเกจ 
Dojo มีระบบการจัดการเป็นแพ็จเกจ เพื่อให้สามารถแยกพัฒนาเป็นส่วนๆได้
โดยสคริปต์ส่วนหลักทำหน้าที่จัดสภาพแวดล้อมเพื่อเตรียมโหลดแพ็จเกจที่จะใช้
โดยสร้างเนมสเปซต่างๆ เช่น "io", "event", "lfx", และอื่นๆ ไว้ใต้เนมสเปซ "dojo"
หลังจากนั้นเมื่อต้องการใช้แพ็จเกจใด ค่อยโหลดแพ็จเกจนั้นๆในระหว่างการทำงานขึ้นมา (เช่น ผ่าน XMLHttpRequest)
โดยระบบจัดการแพ็จเกจสามารถโหลดแพ็จเกจอื่นๆนอกจาก เนมสเปซ "dojo" ได้
ทำให้สามารถเพิ่มเอกซ์เทนชัน (Extension) หรือ ไลบรารี (Library) อื่นๆของเราเองได้ด้วย

แพ็จเกจหนึ่งๆอาจประกอบด้วยไฟล์เดียว หรือหลายๆไฟล์รวมกัน.
แต่ละไฟล์หรือแพ็จเกจ สามารถบอกความต้องการว่าต้องใช้ไฟล์หรือแพ็จเกจใดบ้างในการทำงาน
เมื่อทำการโหลด ของที่ต้องการทั้งหมดจะถูกโหลดตามไปโดยอัตโนมัติ

แต่เว็บเบราว์เซอร์มักไม่เก็บข้อมูลจาก XMLHttpRequest ไว้ในแคช ต่างจากไฟล์ JavaScript ธรรมดาที่มักจะถูกเก็บไว้เสมอ
ทำให้การอ้างแพ็จเกจต่างๆ ต้องทำการโหลดจากเซิร์ฟเวอร์ใหม่ทุกครั้ง
เพื่อลดปัญหาดังกล่าวจึงมีการสร้างโค้ดแบบเป็น โพรไฟล์ (Profiles) ขึ้น
โดยสามารถเขียนโพรไฟล์ระบุรายการแพ็จเกจที่จำเป็น
จากนั้นใช้ Apache Ant ช่วย เพื่อรวมแพ็จเกจเหล่านี้เป็นไฟล์ JavaScript ที่บีบอัดแล้วไฟล์เดียว

สำหรับโพรไฟล์การใช้งานทั่วๆไปสามารถหาดาวน์โหลด ได้ในที่เดียวกันกับที่ให้ดาวน์โหลด Dojo ฉบับเต็ม

การเก็บข้อมูลในฝั่งผู้ใช้ 
นอกจากสนับสนุนการทำงานกับระบบคุกกี้แล้ว
Dojo ยังมีระบบการเก็บข้อมูลในเครื่องผู้ใช้อย่างอื่นที่ เรียกว่า Dojo Storage ด้วย
โดย Dojo Storage สามารถทำงานกับหลายเว็บเบราว์เซอร์ที่ได้รับความนิยมในปัจจุบัน เช่น อินเทอร์เน็ตเอกซ์พลอเรอร์, ไฟร์ฟอกซ์ และ ซาฟารี
ในการทำงาน Dojo จะเลือกวิธีการเก็บข้อมูลที่เหมาะสมที่สุดในแต่ละเบราว์เซอร์เอง เช่น
ใน ไฟร์ฟอกซ์ 2 จะใช้ระบบการเก็บข้อมูลของเบราว์เซอร์เอง (Native browser persistence),
ในเบราว์เซอร์อื่นๆจะใช้ Flash applet. โดย Flash 6+ นั้นถูกติดตั้งมากกว่า 95% ของเครื่องคอมพิวเตอร์ที่ใช้อินเทอร์เน็ตได้
ทำให้ระบบการเก็บข้อมูลนี้สามารถใช้งานได้กับเว็บแอปพลิเคชันที่อยู่ทางฝั่งเซอฟ์เวอร์ส่วนใหญ่
สำหรับเว็บแอปพลิเคชัน ที่อยู่ภายในเครื่องของผู้ใช้เอง (อย่างเช่นในซีดีสื่อการสอน หรือ URL ที่ขึ้นด้นด้วย file://)
สำหรับ ไฟร์ฟอกซ์ Dojo Storage จะใช้ XPCOM แทน และจะใช้ ActiveX แทนสำหรับ อินเทอร์เน็ตเอกซ์พลอเรอร์

นักพัฒนาสามารถใช้งาน Dojo Storage ในลักษณะเดียวกับการใช้ตารางแฮช (hash table) ผ่านการเรียก put() และ get()

ดูเพิ่ม 
 Prototype Javascript Framework
 เอแจ็กซ์
 จาวาสคริปต์
 XMLHttpRequest

อ้างอิง

แหล่งข้อมูลอื่น 
 dojotoolkit.org 
 Dojo Project's JotSpot wiki  
 Dojo Foundation  
 Ajaxian.com 

การเขียนโปรแกรม