Как передать прослушиватель событий в качестве динамического атрибута в Marko? - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь создать форму в Marko, и для входных данных я использую компонент, который создаст входные данные и будет обрабатывать проверку.Проблема с дырой заключается в том, что я пытаюсь передать прослушиватель событий как динамический атрибут.

У меня есть массив полей в качестве объектов, содержащий тип, идентификатор и, если необходимо проверить поле, объект атрибута.с функцией обработчика.

$ const fields= [
   {
    type: 'email',
    id: 'exampleEmail',
    atrrs: {
      'on-change' : 'check'
    }
  '},
.
.
.
]

<for|field| of=fields>
   <input type=`${field.type}` id=`${field.id}` ...field.attrs>
</for>

Вывод должен быть:

<input type='email' id='exampleEmail' on-change('check')>

Но вместо этого у меня есть:

<input type='email' id='exampleEmail' on-change='check'>

И если я пытаюсь передать атрибут в виде строки вместо объекта, я получаю предупреждение о переносе и устаревании:

МИГРАЦИЯ "$ {attribute}" устарела.Пожалуйста, используйте вместо этого модификатор "... attribute"

ВНИМАНИЕ!«Передача строки в виде динамических атрибутов ('<div ${string}>' or '<div ...string>') устарела, вместо нее используйте объект».

1 Ответ

0 голосов
/ 24 сентября 2019

Marko в настоящее время не поддерживает распространение слушателей событий в тег.Мы рассматриваем несколько различных вариантов решения этой проблемы и, вероятно, найдем решение в ближайшем будущем.

На данный момент, чтобы позволить родителю прослушивать события из узла DOM в его дочернем элементе, вы должны повторно-Эмитировать событие от дочернего компонента.Самый краткий способ сделать это - установить встроенный метод emit в качестве обработчика для события:

<button on-click("emit", "my-click")/>

Это будет повторно генерировать нажатие кнопки как "мой-click "событие на компоненте.Конечно, вы можете переиздать его с тем же именем события.Вам нужно будет делать это для каждого события, которое вы хотите, чтобы родитель мог слушать.

...