การจัดการเหตุการณ์ที่เหมาะสมโดยใช้ jQuery

ฉันทำงานกับการจัดการเหตุการณ์บางอย่างใน 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) ดีขึ้นจริงหรือ และที่สำคัญกว่านั้น ยังมีวิธีที่ ดีกว่า อยู่หรือไม่ พยายามพัฒนาทักษะของฉันอยู่เสมอ โดยเฉพาะอย่างยิ่งเกี่ยวกับการออกแบบโปรแกรมที่ดี ดังนั้นถ้าใครสามารถให้ความกระจ่างเกี่ยวกับเรื่องนี้ได้ ฉันจะขอบคุณมาก!


person JorenB    schedule 10.07.2009    source แหล่งที่มา


คำตอบ (1)


ตนเองเป็นวิธีมาตรฐานในการทำสิ่งที่คุณต้องการ โปรดทราบว่าความสามารถในการกำหนดบริบทที่แตกต่างกันนี้กำลังจะมาใน jQuery รุ่นถัดไป โปรดดูที่ ที่นี่

person redsquare    schedule 10.07.2009