|
| 1 | +# ⚡ Událost |
| 2 | + |
| 3 | +Událost definuje událost/zprávu aplikace. |
| 4 | +Událost je možné definovat s obsluhou nebo pouze definovat (bez obsluhy). |
| 5 | + |
| 6 | +## Definice |
| 7 | + |
| 8 | +1. Definujte objekt dat události nebo určete, který z již definovaných potomků ⚡ [IEvent][IEvent] se vám pro událost hodí: |
| 9 | + |
| 10 | +```javascript |
| 11 | +class ClickHandlerRegister extends IEvent { |
| 12 | + constructor() { |
| 13 | + super(); |
| 14 | + this.handlerId = undefined; |
| 15 | + this.handler = undefined; |
| 16 | + } |
| 17 | +} |
| 18 | +``` |
| 19 | + |
| 20 | +2. Definujte třídu pluginu pro událost: |
| 21 | + |
| 22 | +```javascript |
| 23 | +class pEventPlugin extends IPlugin { |
| 24 | + static EVT_CLICK_HANDLER_REGISTER = 'ClickHandlerRegister'; |
| 25 | + |
| 26 | + init() { |
| 27 | + const T = this.constructor; |
| 28 | + const TI = this; |
| 29 | + |
| 30 | + // (B) |
| 31 | + |
| 32 | + super.init(); |
| 33 | + } |
| 34 | +} |
| 35 | +Plugins.catalogize(pEventPlugin); |
| 36 | +``` |
| 37 | + |
| 38 | +3. Rozhodněte, zda můžete mít obsluhu přímo v pluginu nebo ji potřebujete mít právě mimo plugin. Podle svého případu si vyberte potřebný postup podle dalších kapitol. |
| 39 | + |
| 40 | +4. Zdroj kódu kapitoly pak vždy vložte do místa komentáře **(B)**. |
| 41 | + |
| 42 | +### ⚡ Událost s obsluhou |
| 43 | + |
| 44 | +```javascript |
| 45 | + const h_EVT_CLICK_HANDLER_REGISTER = (reply) => { |
| 46 | + // ... |
| 47 | + reply.result = 'replyValue'; |
| 48 | + } |
| 49 | + TI.eventDefinitions.push([T.EVT_CLICK_HANDLER_REGISTER, ClickHandlerRegister, h_EVT_CLICK_HANDLER_REGISTER]); |
| 50 | +``` |
| 51 | + |
| 52 | +### 📄⚡ Událost pouze definovaná |
| 53 | + |
| 54 | +```javascript |
| 55 | + TI.eventDefinitions.push([T.EVT_CLICK_HANDLER_REGISTER, ClickHandlerRegister, null]); // outside event handlers |
| 56 | +``` |
| 57 | + |
| 58 | +### Význam prvků |
| 59 | + |
| 60 | +- class ClickHandlerRegister - datový objekt události (je možné použít stejnou třídu u více událostí nebo dědit z kteréhokoli potomka IEvent) |
| 61 | +- ClickHandlerRegister.constructor - obsahuje výchozí hodnoty objektu zprávy. Je žádoucí, aby se hodnoty, pokud je to možné předvyplnily ideálně výchozí hodnotou podle plánovaného typu. Tato data jsou používána v [prohlížeči objektů][oexplorer] jako součást automatické dokumentace systému. |
| 62 | +- const h_EVT_CLICK_HANDLER_REGISTER - obsluha události |
| 63 | +- reply.result - standardní vlastnost události (⚡ [IEvent][IEvent]), která je automaticky aplikační logikou přebírána jako odpověď obsluhy na událost. Může to být jakýkoli objekt. |
| 64 | +- TI.eventDefinitions.push([T.EVT_CLICK_HANDLER_REGISTER, ClickHandlerRegister, null]) - vytvoří předpis definice události (jméno události, objekt dat události a obslužná metoda nebo null pokud má být událost pouze definována). O zpracování definic se stará předek 🔌 [IPlugin][IPlugin]. |
| 65 | +- super.init(); - provádí standardní inicializace vazeb. Musí být posledním příkazem, aby se řádně inicializovalo vše definované. |
| 66 | + |
| 67 | +## Zasílání události |
| 68 | + |
| 69 | +V obslužném kódu pak můžete události vyvolávat takto: |
| 70 | + |
| 71 | +```javascript |
| 72 | + const eventName = EventNames.MyNewEvent; //nebo: 'MyNewEvent' |
| 73 | + |
| 74 | + sendEvent(eventName, (r) => { |
| 75 | + r.id = aliasName; |
| 76 | + r.result = loadedCount; |
| 77 | + //vyplnění dalších potřebných dat |
| 78 | + }); |
| 79 | +``` |
| 80 | + |
| 81 | +V souboru **appmainBaseLogic.js** naleznete příklady funkcí, které podobná volání zapouzdřují. |
| 82 | +⚠️ Je doporučeno si pro svůj plugin založit podobnou sadu funkcí v odděleném souboru (který vložíte do [seznamu skriptů][jsList]). Volání metody **sendEvent** se neindexuje pro [prohlížeč objektů][oexplorer], ale tyto funkce budou indexovány. |
| 83 | + |
| 84 | +[IEvent]: :_evt:IEvent.md "IEvent" |
| 85 | +[oexplorer]: oexplorer.md "Prohlížeč objektů" |
| 86 | +[IPlugin]: :_plg:IPlugin.md "IPlugin" |
| 87 | +[jsList]: js.lst.md "Seznam skriptů" |
0 commit comments