Memicu acara klik secara manual di Kotak Centang Dojo

Dalam aplikasi saya, saya memiliki kode ini:

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);

  });

Kode ini ada agar pengguna dapat mengklik kotak centang (orderByNameWidget), dan mengubah pengurutan kontak. orderByNameWidget adalah Kotak Centang Dojo biasa.

Sekarang, saya memiliki pengaturan global tentang nilai yang seharusnya dimulai. Cara yang lebih rapi untuk mengatasinya adalah dengan mengatur nilai kotak centang, dan kemudian memicu kejadian:

  // 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 });
  }

Meskipun baris pertama berfungsi (mengatur widget), baris kedua tidak -- peristiwa 'klik' tidak pernah benar-benar terpicu untuk widget.

Saya mencoba setiap kombinasi yang mungkin, memancarkan acara ini di domNode, dll. -- tetapi tidak, sepertinya tidak ingin melakukan apa pun. Di Button.html, dasar untuk CheckBox, Dojo memiliki:

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

Aku ingin tahu apakah itu masalahnya. Jadi... apa yang harus saya tulis untuk simulasi penuh klik kotak centang? Ada petunjuk?


person Merc    schedule 03.08.2014    source sumber


Jawaban (1)


Apakah ada alasan mengapa Anda tidak dapat menggunakan acara change alih-alih click? Itu seharusnya diaktifkan pada klik pengguna dan perubahan terprogram. (Dan acara keyboard, dalam hal ini, yang click kemungkinan besar tidak akan diaktifkan.)

person Ken Franqueiro    schedule 03.08.2014
comment
Maksud Anda, memancarkan peristiwa perubahan, bukan klik? - person Merc; 03.08.2014
comment
Maksud saya, Ken, dapatkah Anda melihat bahwa tujuan saya adalah memicu acara tersebut secara manual, daripada melampirkan diri saya ke acara tersebut? - person Merc; 03.08.2014
comment
Maksud saya, acara change sudah diaktifkan saat Anda menetapkan nilai secara terprogram, dan sepertinya itulah yang Anda coba lakukan. Saya rasa saya tidak mengerti mengapa Anda terpaku pada mendengarkan dan memancarkan acara lain ketika change sepertinya sesuai dengan keinginan Anda. - person Ken Franqueiro; 03.08.2014
comment
Kamu benar sekali, Ken! Sekarang, pertanyaannya tetap: mengapa acara klik tidak berfungsi secara terprogram? Saya belum pernah benar-benar berhasil memancarkan suatu peristiwa secara manual, dan mengaktifkan panggilan balik acara tersebut. Mengapa demikian? - person Merc; 04.08.2014
comment
Saya cukup yakin bahwa _WidgetBase#emit selalu memunculkan peristiwa DOM, sedangkan bergantung pada widgetnya, widget.on('click', ...) sebenarnya mungkin mempertimbangkan suatu metode, bukan mendengarkan peristiwa DOM. Kode kompatibilitas belakang Dijit untuk on tidak sepenuhnya jelas. - person Ken Franqueiro; 05.08.2014
comment
Saya sangat berharap delite akan benar-benar mudah dan akan menghilangkan semua masalah kompatibilitas belakang yang membuat dojo begitu rumit... - person Merc; 05.08.2014