โดโจทูลคิต

**โดโจทูลคิต** ( เขียนตามสไตล์เป็น **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 

หมวดหมู่:การเขียนโปรแกรม