Re: про SOM
От: flаt  
Дата: 05.07.20 06:36
Оценка:
Здравствуйте, Bаня, Вы писали:


SOM ассеты бывают двух типов: глобальные и привязанные к DOM-элементу.

Описываются они одинаково (SOM_PASSPORT_BEGIN), отличие лишь в регистрации и доступе:

1) глобальные регистрируются через SciterSetGlobalAsset и обращаться к ним нужно по имени класса, указанном в паспорте (имя может задаваться отдельным параметром, кстати): counter.Increment()
2) локальные регистрируются в обработчике событий элемента через HANDLE_SOM, а обращение к ним идёт как к свойству элемента: el.counter.Increment()

На первый взгляд, второе не особо отличается от старого BEGIN_FUNCTION_MAP — они похожи, но SOM мощнее — там не только автоматическая распаковка параметров sciter::value, но и поддержка свойств, а не только функций.


B>1. имеем класс c++ типа

B>
B>class MySuperDuperMegaClass: public sciter::om::asset<MySuperDuperMegaClass>
B>{...}
B>

B>из tis к нему нужно тоже обращаться как MySuperDuperMegaClass.MyFunc() ?

Само описание класса никак не влияет на метод обращения к нему, поэтому вопрос непонятен.



B>2. возьмём простейший класс на c++:



B>как теперь это юзать в tis?

counter.Increment()

B>никак, то есть как global namespace object нужно использовать не название класса, а набор букв по желанию как и в п.1

SOM_PASSPORT_BEGIN_EX позволяет задать произвольное имя, или я не понял вопроса.


B>3. зачем SciterSetGlobalAsset пытается удалить объект?

Затем, что по умолчанию там ожидается объект, созданный в памяти, и управление его жизнью идёт через счётчик ссылок. Это поведение можно переопределить, см asset_release и asset_finalize.



B>4. как прикрутить sciter::om::asset<MySuperDuperMegaClass> к фрейму?


B>ответ: юзать sciter::event_handler + attach_event_handler/detach_event_handler, но тогда зачем SOM?

Для свойств и простого мапинга между функциями и свойствами класса и скриптом.
Отредактировано 05.07.2020 6:37 flаt . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.