Почему элементы xforms-select и xforms-deselect всплывают? - PullRequest
0 голосов
/ 08 октября 2018

Согласно спецификации XForms большинство событий называют "пузырями".

В соответствии со спецификацией события DOM уровня 2 событие, которое «всплывает», означает, что обработчики для этого события, связанные с элементами-предками целевого объекта отправки события, также получат это событие.

Если событие указывается как «пузыри», это означает, что действие xf: dispatch не может изменить поведение пузыря, чтобы ограничить его целью.

Я не понимаю, в чем выгода, поэтомумного событий xforms к пузырю.Например, xforms-select и xforms-deselect.Они применимы к xf: item (из xf: select *) и xf: case (из xf: switch, т. Е. Используются в форме с вкладками).

Допустим, у меня есть xf: case с xforms- выберите обработчик, который будет вызывать обновление дорогого виджета рендеринга, только когда вкладка фактически выбрана, а не каждый раз, когда обновляется модель.Теперь у меня также есть xf: select на той же вкладке.Теперь всякий раз, когда пользователь выбирает другой элемент в этом выделении, xf: case будет получать xforms-select на фазе пузырьков, каждый раз выполняя дорогостоящую операцию обновления.

Это, кажется, не имеет смысла.

На самом деле xforms-node-attach имеет право: мы действительно хотим точно указать, к какому элементу формы присоединяется узел.Но кроме этого, большинство событий, как говорят, пузырится.

Я мог бы лучше приспособиться к этому вопросу, если бы понял причину этого.В противном случае у меня возникает соблазн изменить свой движок XForms, чтобы изменить определение xforms-select и xforms-deselect, чтобы не пузыриться.

1 Ответ

0 голосов
/ 08 октября 2018

Это позволяет разрешить то, что известно как делегирование события :

. «Делегирование события» относится к процессу использования распространения события (всплытия) для обработки событий на более высоком уровне в DOM.чем элемент, на котором возникло событие. Это позволяет нам присоединить один прослушиватель событий для элементов, которые существуют сейчас или в будущем ».(из более старой версии этой страницы документации jQuery )

В общем, это хорошо:

  • Вы используете меньше слушателей событий.
  • Слушатель может прослушивать несколько целей.
  • Вам не нужно удалять / добавлять слушателей, когда элементы DOM добавляются / удаляются.

Похоже, что вМир HTML, все движется к тому, чтобы позволить всему пузыритьсяНапример, старое событие focus не пузырилось, а новое focusin событие пузырилось.

Если у вас есть обработчик событий, который активируется событиями, отправленными нескольким целям, в некоторых случаях вам нужноспособность различать.Здесь полезна информация о контексте события.Такие библиотеки, как jQuery, также позволяют вам связывать обработчик событий, отфильтрованный селектором CSS, что очень удобно.

Теперь, в частности, xforms-select, ваша проблема заключается в том, что вы не можете различить это событие, отправленное на xf:case против xf:select.Это может означать, что в XForms не должно быть ни одного события для этих двух сценариев, или в нем должно быть достаточно информации о контексте события, чтобы различать их.Я не думаю, что это дает основание не допустить пузыря события.

...