Re: Повесить обработчик событий onClick на элемент
От: c-smile Канада http://terrainformatica.com
Дата: 15.03.15 19:20
Оценка: 3 (1)
Здравствуйте, DmitryScaletta, Вы писали:

DS>Как мне на "my_div" повесить обработчик событий onClick?


Все DOM событиия всплывают по цепочке контейнеров к окну поэтому если у тебя окно отнаследовано от sciter::event_handler то все DOM events туда приходят.
Поэтому ты можешь написать нечто типа:
bool my_window::on_event(HELEMENT he, HELEMENT target, BEHAVIOR_EVENTS type, UINT_PTR reason) {
  if( type == BUTTON_CLICK && dom::element(target).test("#table > .my_div") )
    on_my_div_clicked();
}


Если у тебя таких обработчиков много то имеет смысл нарисовать вокруг on_event что-то типа DOM_EVENT_MAP :

BEGIN_DOM_EVENT_MAP
  ON_BUTTON_CLICK( "#table > .my_div" , on_my_div_clicked )
  ...
END_DOM_EVENT_MAP


Да, и для того чтобы элемент генерировал BUTTON_CLICKs нужно в CSS написать

#table > .my_div { behavior:button; } // focusable
#table > .my_div { behavior:clickable; } // non-focusable


Но вообще-то ведущие собаководы рекомендуют более высокоуровневый UI/backend обмен, т.е. event handlers находятся и обрабатываются в скрипте
и вызывают native functions по результатам обработки:

include "decorators.tis"

@click @on "#table > .my_div" 
  function(evt) {  
    if( isValidSomehow(evt.target) ) 
      view.backendDoSomething(); 
  }


Смысл такой организации в том что дизайнер может поменять markup поэтому вшивать в native код селекторы можно лишь в том случае если ты сам и дизайнер и программер.
Со скриптом DOM structure refactoring проще.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.