Инициировать событие клика вручную в Dojo CheckBox

В моем приложении у меня есть этот код:

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. Код обратной совместимости Dijit для on не совсем прост. - person Ken Franqueiro; 05.08.2014
comment
Я действительно надеюсь, что delite будет полностью простым и решит все проблемы обратной совместимости, которые делают додзё таким сложным... - person Merc; 05.08.2014