ทริกเกอร์เหตุการณ์การคลิกด้วยตนเองในกล่องกาเครื่องหมาย Dojo

ในใบสมัครของฉัน ฉันมีรหัสนี้:

postCreate: function(){

  // ...

  // Change the listWidget's order depending on whether the checkbox is
  // ticked or not
  self.extraWidget.orderByNameWidget.on( 'click', function( e ){
    var orderByNameWidget = this;
    field = orderByNameWidget.get('value') ? 'firstName' : 'lastName';

    // Make up the collection with the initial filters
    var collection = self.store;
    if( self.initialFilter ) collection = collection.filter( self.initialFilter );
    collection = collection.sort( field );

    self.listWidget.set('collection', collection);

  });

รหัสนี้มีไว้เพื่อให้ผู้ใช้สามารถคลิกที่ช่องทำเครื่องหมาย (orderByNameWidget) และเปลี่ยนการเรียงลำดับผู้ติดต่อ orderByNameWidget เป็นช่องทำเครื่องหมาย Dojo ปกติ

ตอนนี้ฉันมีการตั้งค่าทั่วโลกว่าค่านั้นควรเริ่มต้นด้วยอะไร วิธีที่ง่ายกว่าในการจัดการกับมันคือการตั้งค่าของช่องทำเครื่องหมาย จากนั้นทริกเกอร์เหตุการณ์:

  // Artificially emit the initial click if the default says so    
  if( ConfigVars.workspacesUsersInfo.orderByNameDefault ){
    self.extraWidget.orderByNameWidget.set( 'value', true );

    self.extraWidget.orderByNameWidget.emit( 'click', { bubbles: true, cancelable: true });
  }

ในขณะที่บรรทัดแรกใช้งานได้ (การตั้งค่าวิดเจ็ต) บรรทัดที่สองไม่ทำงาน -- เหตุการณ์ 'คลิก' จะไม่ถูกทริกเกอร์สำหรับวิดเจ็ตจริงๆ

ฉันลองทุกชุดที่เป็นไปได้ โดยปล่อยเหตุการณ์นี้บน domNode ฯลฯ -- แต่ไม่เลย ดูเหมือนจะไม่ต้องการทำอะไรเลย ใน Button.html ซึ่งเป็นพื้นฐานสำหรับ CheckBox นั้น Dojo มี:

 data-dojo-attach-event="ondijitclick:__onClick"

ฉันสงสัยว่านั่นเป็นปัญหาหรือไม่ ดังนั้น... ฉันควรเขียนอะไรสำหรับการจำลองการคลิกช่องทำเครื่องหมาย เต็ม พอยน์เตอร์ใด ๆ ?


person Merc    schedule 03.08.2014    source แหล่งที่มา


คำตอบ (1)


มีเหตุผลไหมว่าทำไมคุณไม่สามารถใช้เหตุการณ์ change แทน click เพื่อเริ่มต้นได้ ซึ่งควรจะเริ่มทำงานทั้งจากการคลิกของผู้ใช้และการเปลี่ยนแปลงทางโปรแกรม (และกิจกรรมบนคีย์บอร์ดสำหรับเรื่องนั้น ซึ่ง click ไม่น่าจะเปิดขึ้นมา)

person Ken Franqueiro    schedule 03.08.2014
comment
คุณหมายถึงการเปล่งเหตุการณ์การเปลี่ยนแปลงแทนที่จะคลิกใช่ไหม? - person Merc; 03.08.2014
comment
ฉันหมายถึง เคน คุณเห็นไหมว่าจุดประสงค์ของฉันคือการ กระตุ้น กิจกรรมด้วยตนเอง แทนที่จะเข้าร่วมกิจกรรม - person Merc; 03.08.2014
comment
ฉันหมายถึงว่าเหตุการณ์ change เริ่มทำงานแล้วเมื่อคุณตั้งค่าโดยทางโปรแกรม ซึ่งดูเหมือนว่าคุณกำลังพยายามทำอะไรอยู่ ฉันเดาว่าฉันไม่เข้าใจว่าทำไมคุณถึงจับจ้องไปที่การฟังและปล่อยกิจกรรมอื่นออกมาเมื่อ change ดูเหมือนเป็นสิ่งที่คุณต้องการ - person Ken Franqueiro; 03.08.2014
comment
คุณพูดถูกเคน! ตอนนี้คำถามยังคงอยู่: เหตุใดจึงไม่ปล่อยเหตุการณ์การคลิกโดยทางโปรแกรม ฉันไม่เคยจัดการปล่อยเหตุการณ์ด้วยตนเองเลยจริงๆ และได้รับการเรียกกลับของเหตุการณ์เพื่อเริ่มทำงาน ทำไมเป็นเช่นนั้น? - person Merc; 04.08.2014
comment
ฉันค่อนข้างแน่ใจว่า _WidgetBase#emit ปล่อยเหตุการณ์ DOM เสมอ ในขณะที่ widget.on('click', ...) จริงๆ แล้วอาจกำลังพิจารณาวิธีการ ไม่ใช่ฟังเหตุการณ์ DOM ทั้งนี้ขึ้นอยู่กับวิดเจ็ต รหัส back-compat ของ Dijit สำหรับ on นั้นไม่ได้ตรงไปตรงมาเลย - person Ken Franqueiro; 05.08.2014
comment
ฉันหวังว่า delite จะตรงไปตรงมาโดยสิ้นเชิง และจะขจัดปัญหาความเข้ากันได้ด้านหลังทั้งหมดที่ทำให้ dojo ซับซ้อนมาก... - person Merc; 05.08.2014