Sunday, July 23, 2006

Custom Dojo Package

โดยปกติ เมื่อเราสั่งคำสั่ง
dojo.require("dojo.lang");

สิ่งที่เกิดขึ้น ก็คือ dojo จะค้นหาว่า package dojo.lang
ถูก include ไว้ใน file dojo.js แล้วหรือยัง
ถ้ามีแล้ว ก็จะไม่ทำอะไร แต่ถ้ายังไม่มี
ก็จะทำการ load มาให้

ประเด็นคำถามก็คือ แล้วมันจะ load package dojo.lang จาก file อะไร
คำตอบก็คือ dojo จะลอง load file ตามลำดับนี้ (relative จาก dojo root directory)

- src/lang.js
- src.js
- __package__.js

ถ้าเจอใน file ไหนก่อน ก็จะหยุดที่ตรงนั้น
แต่ถ้าไม่เจอเลย ก็จะ raise error

ที่นี้ถ้าเรามี custom component ของเราเอง
แต่ไม่อยากเก็บไว้ใต้ path เดียวกับ dojo
เราจะต้องทำอย่างไร

ทดลองสร้าง package pok.test ขึ้นมา
กำหนดว่า source code ของ package นี้จะเก็บอยู่ใต้ directory pok
ที่อยู่ระดับเดียวกับ directory src ของ dojo
จากนั้น สร้าง file test.js ไว้ใต้ directory pok

+ src
+ pok
- test.js

คำสั่งที่สำคัญที่ต้องมีใน file test.js ก็คือ
dojo.provide("pok.test");

ซึ่งเป็นการบอกให้กลไกการ load ของ dojo หยุดการค้นหา package

เวลาจะใช้งาน custom package
เราก็ต้องมีการระบุ path ในการ search โดยใช้คำสั่ง

dojo.setModulePrefix("pok", "pok");

parameter ตัวแรก คือชื่อ prefix ของ package
ส่วน parameter ตัวที่ 2 ก็คือ relative path ของ package
ซึ่ง relative กับ root directory ของ dojo

เมื่อเราสั่ง dojo.require("pok.test");
dojo ก็จะดูว่า prefix ของ package ที่ชื่อ pok
จะต้องไปหาที่ directory ไหน
กลไกการหา ก็เป็นตามปกติ นั่นคือ

- pok/test.js
- pok.js
- __package__.js

Related link from Roti

No comments: