การทำ Lazy Loading ใน Kendo UI Drop Down List
Lazy Loading คือ การจัดการทรัพยากรเท่าที่ควรจะใช้ จัดการเกี่ยวกับการ request ขอข้อมูลจาก service หลังบ้าน และเพื่อเพิ่มประสิทธิภาพการทำงานของฝั่ง client ให้แสดงเฉพาะข้อมูลที่ผู้ใช้ควรจะเห็นเท่านั้น
ต้องขอเกริ่นก่อนว่า kendo UI มี data source ที่เอาไว้สำหรับจัดการข้อมูลที่จะถูกนำไปแสดงใน drop down list ซึ่งถ้าใครไม่เข้าใจในส่วนที่เรียกว่า data source สามารถเข้าไปเพิ่มเติมได้ที่บทความด้านล่างนี้ อ่านเพิ่มเติมได้ที่ https://atlasarcadiacom.wixsite.com/babylon/forum/development/kendo-data-source-khuue-aair
การทำ lazy loading ใน kendo UI จะต้องจัดการ 2 ส่วนด้วยกัน คือ ส่วนของ HTML และ JavaScript ที่จะจัดการ Data source
การสร้าง Drop Down List
<select data-role="dropdownlist"
data-text-field="text"
data-value-field="value"
data-filter="contains"
data-virtual="{ itemHeight: 45 }"
data-height="120"
data-bind="source: source, value: selectedItem">
</select>
กำหนด Item Heigth
itemHeigth คือ property ที่จะต้องถูกกำหนดค่า เพื่อบอกว่า item ข้อมูลที่จะแสดงภายใต้ drop down list แต่ละตัวนั้นมีความสูงเท่าไร ซึ่งจะถูกไปคำนวณในการกำหนด pageSize
ข้อควรระวัง
ถ้าหากไม่กำหนด itemHeight ตัว drop down list จะเรียก DataSourceRequest ให้คำนวณให้ อย่างไรก็ตามปัญหานี้มีโอกาสเกิดขึ้นน้อยมาก
กำหนด Container Height
height คือ property ที่จะถูกกำหนดค่า เพื่อบอกว่า container ของ pop-up ที่จะแสดงข้อมูลใน drop donw list มีความสูงทั้งหมดเท่าไร ซึ่งจะถูกไปคำนวณในการกำหนด pageSize
กำหนด pageSize
การกำหนด pageSize ให้ถูกต้องนั้น สามารถทำได้โดยการนำการคำนวณจากสูตรดังต่อไปนี้
((height / itemHeight) * 4)
ตัวอย่าง กำหนดว่า
height คือ 120px
itemHeight คือ 45
ในกรณีนี้ pageSize ควรจะถูกกำหนดเท่ากับ 11 เนื่องจาก (( 120 / 45 ) * 4 ) = 10.66667
ข้อควรระวัง
เพื่อหลีกเลี่ยง Request Initial แบบหลายครั้ง ให้ประกาศค่า pageSize ให้ถูกต้อง
var viewModel = kendo.observable({
selectedItem: "",
source: new kendo.DataSouce({
serverFiltering: true,
pageSize: 11,
transport: {
read: {
url: "test/getSource",
contentType: "application/json",
dataType: "json",
type: "GET"
}
},
schema: {
data: "Data",
total: "Total"
}
}),
});