Сообщение Re: про SOM от 05.07.2020 6:36
Изменено 05.07.2020 6:37 flаt
Re: про SOM
Здравствуйте, 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>из tis к нему нужно тоже обращаться как MySuperDuperMegaClass.MyFunc() ?
Само описание класса никак не влияет на метод обращения к нему, поэтому вопрос непонятен.
B>2. возьмём простейший класс на c++:
B>[ccode]
B>class counter : public sciter::om::asset<counter>
B>{
B> int Increment()
B> {
B> count++;
B> return count;
B> }
B> int Decrement()
B> {
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?
Для свойств и простого мапинга между функциями и свойствами класса и скриптом.
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>[ccode]
B>class counter : public sciter::om::asset<counter>
B>{
B> int Increment()
B> {
B> count++;
B> return count;
B> }
B> int Decrement()
B> {
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?
Для свойств и простого мапинга между функциями и свойствами класса и скриптом.
Re: про SOM
Здравствуйте, 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>из 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?
Для свойств и простого мапинга между функциями и свойствами класса и скриптом.
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?
Для свойств и простого мапинга между функциями и свойствами класса и скриптом.