ฉันทำงานกับการจัดการเหตุการณ์บางอย่างใน Javascript และเพิ่งตัดสินใจย้ายจาก Prototype ไปเป็น jQuery ฉันพบปัญหาในการใช้ Prototype แล้ว แต่พบวิธีแก้ปัญหาบางอย่างซึ่งอย่างน้อยก็แก้ปัญหาได้ แต่ก็ดูไม่ดีสำหรับฉัน ตอนนี้ฉันกำลังเขียนทุกอย่างใหม่ ฉันอยากจะทำให้มันทั้งหมดตรงไปตรงมาในระหว่างเดินทาง หากเป็นไปได้ ฉันต้องการทราบคำแนะนำของคุณเกี่ยวกับ 'แนวทางปฏิบัติที่ดีที่สุด' ที่เกี่ยวข้องกับปัญหานี้
คำอธิบายสั้น ๆ: ฉันสร้างต้นแบบ 'objectList' ซึ่งช่วยให้คุณสามารถเลือกรายการได้ (ซึ่งในทางกลับกันจะทำให้สิ่งอื่น ๆ เคลื่อนไหว) เพื่อให้ชีวิตง่ายขึ้น มีการใช้ 'searchList' (ต้นแบบอื่นที่ฉันเขียน) ซึ่งช่วยให้คุณสามารถกรองการค้นหาแบบเพิ่มหน่วยและการเรียงลำดับแบบสดในรายการที่แสดงได้ รายการค้นหาเป็นสมาชิกของรายการวัตถุ ดังที่เห็นได้ในโค้ดด้านล่าง หากมีการคลิกรายการ รายการค้นหาจะทริกเกอร์เหตุการณ์ (กำหนดเอง) ซึ่งรายการวัตถุควรตอบสนอง ตอนนี้ฉันใช้วิธีนี้:
var self = this;
$(this.searchList).bind('objectSelected', function() {
self.selectObject(self.searchList.getSelectedId());
});
ใน Prototype ฉันเคย bind()
โทรกลับไปที่ this
เพื่อที่ฉันจะได้สามารถเข้าถึง this
เดียวกันจากที่นั่น (การควบคุมค่าของ 'this' ในเหตุการณ์ jQuery) อย่างไรก็ตาม ดูเหมือนว่า jQuery จะไม่รองรับการเชื่อมโยงขอบเขตดั้งเดิม และอาจเป็นเพราะเหตุผลด้วย 'self
-approach' ใช้งานได้ แต่ฉันสงสัยว่านี่ถือเป็น 'โค้ดที่ดี' หรือไม่ หรืออาจเป็นลางบอกเหตุของการออกแบบโปรแกรมที่ไม่ดี
นอกจากนี้ บางครั้งฉันเคยทำให้การโทรกลับเป็นสมาชิกของวัตถุ 'พาเรนต์' เช่นนี้ (หมายเหตุ: Prototype-syntax):
init: function() {
var self = this;
this.searchList.observe('objectWasSelected', this.objectSelected.bind(this));
}
objectSelected: function() {
this.selectObject(this.searchList.getSelectedId());
}
แต่หลังจากคิดดูแล้ว มันก็ดูโง่เง่ามาก คำถามหลัก: แนวทางใหม่ของฉัน (โค้ดบนสุดที่ใช้ self
) ดีขึ้นจริงหรือ และที่สำคัญกว่านั้น ยังมีวิธีที่ ดีกว่า อยู่หรือไม่ พยายามพัฒนาทักษะของฉันอยู่เสมอ โดยเฉพาะอย่างยิ่งเกี่ยวกับการออกแบบโปรแกรมที่ดี ดังนั้นถ้าใครสามารถให้ความกระจ่างเกี่ยวกับเรื่องนี้ได้ ฉันจะขอบคุณมาก!