Size: a a a

2020 October 12

PM

Pavel 🦇 Malyshev in Svelte [svelt]
neadmin
Все классы либы наследуются от некого Observable.
Таким образов у всех потомков есть события change и error.
С событиями почти все решается тремя строчками кода: дополнение списка событий недостающими, подписка на список событий при создании компоненты и отписка при уничтожении.
Утилиты рулят, хотя эти три строчки приходится дублировать во всех комопнентах (пока только тех, где это нужно уже сейчас, а просто в теории).

Но есть методы, типа changed и dispatchEvent, scale, simplify, transform, translate и т.д. с переменным числом параметров.
Не все преобразования данных можно повторить, а затем предать измененные данные в компонент.
И потом, много времени уходит внутри либы на перевод из входного формата во внутренний и перерисовку (в некоторых случаях объект либы пересоздается, т.к. изменение не всех параметром предусмотрено после создания экземпляра) - использование этих функций дает значительное ускорение.

Описание каждой из функций, это примерно три строчки:
`export function simplify( arg0, arg1, arg2, arg3 ) {
  return _unit.simplify( arg0, arg1, arg2, arg3 );
}`
И так 5-10 раз в 20-30 компонентах... иногда с добавлением каких-то проверок или ожидания.
Этим методы нужны для решения задач. Они занимают вроде бы не много места, зато дублируются в паре десятков компонентов...

Можно вставлять в слот доп.комопнент, отвечающий за вызов той или иной функции родителя. Но не все функции обратимы, и, казалось бы логичная отмена функции удалением из слота не всегда возможна, либо требует дополнительного расхода памяти для хранения исходного состояния данных. Да и просто странным выглядит вызов функции компонента генерацией вложенного компонента, ведь бывает нужно вызвать одну функцию, а бывает нужна последовательнось, при том что некоторые завершаются не синхронно... за несколько часов работы получится длинная портянка вложенных компонентов. Можно обойтись и одним копонентом, если забить на обратимость функции, как при вызове экспортной функции и даже ловить return через событие... Такая схема сильно усложняет код.

Есть мнение, что нужно написать одну функцию, аля getUnit - возвращающею экземпляр созданного в компоненте объекта либы и дальше в коде творить все что вздумается, но опять же эту функцию требуется повторить в каждом помпоненте-обертке... а хотелось бы написать один раз и унаследовать...

Т.е. в идеале нужно что бы у всех копонент экспортировалась минимум одна, одна и та же (возвращающая экземпляр объекта созданного в компоненте) , функция, а при onMount / onDestroy дергались функции подписки и отписки от событий...

Это легко решается наследованием, но его нет...
А как это решить композицией компонентов?
если это код из свелт компонента, тогда почему бы не делать ре-экспорт просто?
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
я про это:

export function simplify( arg0, arg1, arg2, arg3 ) {
  return _unit.simplify( arg0, arg1, arg2, arg3 );
}
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
хотя если подумать то в контексте свелт такой код вообще смысла не имеет
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
Т.е. в идеале нужно что бы у всех копонент экспортировалась минимум одна, одна и та же (возвращающая экземпляр объекта созданного в компоненте) ,

зачем вообще экземпляр в декларативном подходе?
источник

n

neadmin in Svelte [svelt]
это было описание проблемы, суть вопроса в конце:

как не дублировать экспортную функцию в куче компонентов,
и повторить одни и те же действия во всех компонентых при  onMount / onDestroy ?
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
neadmin
это было описание проблемы, суть вопроса в конце:

как не дублировать экспортную функцию в куче компонентов,
и повторить одни и те же действия во всех компонентых при  onMount / onDestroy ?
если действия одни и те же, тогда это очевидно один и тот же компонент. если это разные компоненты, то очевидно это разные действия
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
я так понял ты какую-то либу на классах хочешь завернуть в свелт компоненты? а что за либа? она DOM управляет или что? Какое у нее предназначение и зачем компонентам свелт вообще наружу показывать инстанс класса этой либы?
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
если можешь сказать точно какая либа, это бы помогло в понимании
источник

n

neadmin in Svelte [svelt]
визуализация данных на canvas
что-то похожее на LeafLet
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
neadmin
визуализация данных на canvas
что-то похожее на LeafLet
выше писали, лучше на экшенах такое делать вообще
источник

n

neadmin in Svelte [svelt]
neadmin
визуализация данных на canvas
что-то похожее на LeafLet
но с обработкой отображаемых данных и с webgl и worker
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
neadmin
но с обработкой отображаемых данных и с webgl и worker
хм, не уверен что такое вообще стоит оборачивать в свелт
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
свелт это про DOM все же по большей части, канвас/вебгл все же вне DOM
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
был эксперимент со svelte-gl, но он заглох вроде
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
это Phaser случаем?
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
если он или что-то  похожее, мой совет не связываться с интеграцией со свелт
источник

n

neadmin in Svelte [svelt]
не он, но близко
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
хотите сделать описание GO чуть более декларативным, то можно легко крутануть JSX и кастомную рендер-функцию
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
выстраивать первичную разметку декларативно на JSX и дальше инстансами уже управлять как обычно
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
я так экспериментировал, вроде даже удобно получалось.
источник