Size: a a a

2020 October 20

PM

Pavel 🦇 Malyshev in Svelte [svelt]
Константин
вооот, так вот,мне нужно с компонента форварднуть дальше эвенты
тоже самое же все:

<Component on:something />
источник

К

Константин in Svelte [svelt]
хак от Алексея, который автор русской документации
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
Константин
у меня <div use:events
а, ну это только для дом элементов конечно
источник

К

Константин in Svelte [svelt]
ну т.е. наверх компонента я могу форварднуть, а из компонента дальше наверх ВСЕ - не могу
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
Константин
ну т.е. наверх компонента я могу форварднуть, а из компонента дальше наверх ВСЕ - не могу
через несколько слоев что ли?
источник

К

Константин in Svelte [svelt]
ну чтобы не писать для всех событий типа <Comp1 on:click on:mouseup ....
источник

К

Константин in Svelte [svelt]
с дом-ноды я могу это через экшн
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
Константин
ну чтобы не писать для всех событий типа <Comp1 on:click on:mouseup ....
это ты лучше у автора хака спроси)
источник

К

Константин in Svelte [svelt]
я думал, вы из одного пантеона =)
источник

MZ

Misha Zamkevich in Svelte [svelt]
Вот это подкат 😅
источник

К

Константин in Svelte [svelt]
Константин
import {bubble, listen} from 'svelte/internal';

export function getEventsAction(component, self) {
 return node => {
   const events = Object.keys(component.$$.callbacks);
   const listeners = [];

   events.forEach(
     event => listeners.push(
       listen(node, event, e =>  {if (self) {e.stopPropagation();} return bubble(component, e);})
     )
   );

   return {
     destroy: () => {
       listeners.forEach(
         listener => listener()
       );
     }
   }
 };
}


при вызове true вторым аргументом передаёшь и всё. На нужном элементе события без бабблинга работают. Но да, это не лучшее решение. Просто надо было быстро.
я про этот хак
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
Константин
я думал, вы из одного пантеона =)
я не юзаю такие хаки, будет официальный on:* будут юзать. но я и не пишут UI киты, там это действительно нужно
источник

К

Константин in Svelte [svelt]
Pavel 🦇 Malyshev
я не юзаю такие хаки, будет официальный on:* будут юзать. но я и не пишут UI киты, там это действительно нужно
да, мне нужно для компонентов как раз. Чтобы под каждый кейс не дорабатывать один и тот же компонент
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
Константин
да, мне нужно для компонентов как раз. Чтобы под каждый кейс не дорабатывать один и тот же компонент
я тоже компоненты юзаю, но они все заточены под приложение, поэтому таких проблем нет. появляется необходимость форварднуть новый ивент, я просто дописываю форвард. не бывает что абсолютно все компоненты требуют форвардить все ивенты в системах с не универсальными компонентами.
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
а вообще, не знаю попробуй может:

      const events = Object.keys(component.$$.callbacks);
     const listeners = [];

     events.forEach(
         event => component.$on(event,  e =>  bubble(component, e))
       );
источник

К

Константин in Svelte [svelt]
Misha Zamkevich
Вот это подкат 😅
да не, это-то шутка, просто хак мне Паша подкинул, я думал, он в курсе
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
Константин
да не, это-то шутка, просто хак мне Паша подкинул, я думал, он в курсе
не я не мог, пытался скрыть его насколько это возможно. это @AlexxNB наверняка хвастался))))
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
знал что в разнос пойдет кто-то)
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
Pavel 🦇 Malyshev
а вообще, не знаю попробуй может:

      const events = Object.keys(component.$$.callbacks);
     const listeners = [];

     events.forEach(
         event => component.$on(event,  e =>  bubble(component, e))
       );
короче я хз как там это устроено, но аналог listen для компонента это .$on на его инстансе. думаю исходя из этого можно что-то придумать
источник

К

Константин in Svelte [svelt]
Pavel 🦇 Malyshev
а вообще, не знаю попробуй может:

      const events = Object.keys(component.$$.callbacks);
     const listeners = [];

     events.forEach(
         event => component.$on(event,  e =>  bubble(component, e))
       );
ммм... тут component - Это current_component?
источник