OOUI/Windows

This page is a translated version of the page OOUI/Windows and the translation is 100% complete.

Window je kontejner pro prvky v podřízeném rámci. Každé okno je spravováno pomocí WindowManager, která se používá k otevírání a zavírání okna a ovládání jeho prezentace. Velikost okna se určuje pomocí symbolického názvu ('small', 'medium', 'large' nebo 'full'), který je interpretován správcem oken. Není-li požadovaná velikost rozpoznána, správce oken zvolí rozumnou rezervu.

Okna OOUI zahrnují Dialog, Dialog procesu a Dialogové okno zprávy. Pro jednoduché případy použití existuje několik pohodlných funkcí. Viz OOUI/Windows/Jednoduché zprávy.

Pamatujte, že okna reagují na velikost zobrazovacího zařízení a podle toho dynamicky upraví své zobrazení. Velikost dialogu by proto měla být považována spíše za přibližnou, než za přesnou specifikaci.

Životní cyklus oken

Spravovaná okna se vzájemně vylučují. Nové okno nelze otevřít, pokud je aktuální okno otevřeno. Samotná okna jsou perzistentní a – místo aby byla po zavření zničena – lze je znovu naplnit příslušnými daty a znovu použít.

Životní cyklus okna je reprezentován objektem WindowInstance. Tento objekt má čtyři vlastnosti obsahující přísliby, které představují primární fáze cyklu: 'opening', 'opened', 'closing' a 'closed'.

  • Příslib opening je vyřešen poté, co se okno začalo otevírat (to může být zpožděno, pokud se jiné okno stále zavírá), přičemž hodnota 'data' je předána volání openWindow().
  • Příslib opened je vyřešen po otevření okna, přičemž hodnota 'data' je předána volání openWindow().
  • Příslib closing je vyřešen poté, co se okno začne zavírat, přičemž hodnota 'data' je předána volání closeWindow().
  • Příslib closed je vyřešen po zavření okna, přičemž hodnota 'data' je předána volání closeWindow().

Příklady, které ukazují tento řetězec příslibů v praxi, najdete v dialogu Process.

Pro zpětnou kompatibilitu jsou objekty WindowInstance vrácené openWindow() a closeWindow() rozšířeny o vlastnosti podobné Promise. Toto bude v budoucnu odstraněno.

Před prvním otevřením okna (a pouze před prvním otevřením) je volána metoda initialize(). Metoda initialize() se používá k naplnění okna trvalým obsahem, který poskytuje jakýsi mechanismus ukládání do mezipaměti. Okno, které obsahuje seznam 250 jazyků, lze tímto seznamem naplnit například během inicializace, a pokud se okno znovu otevře, seznam nebude nutné znovu načítat.

 

Kroky

Opening (otevření)

Fáze otevírání začíná, když se k otevření okna použije metoda openWindow() správce oken nebo metoda open() okna. Příslib 'opening' společnosti WindowInstance je vyřešen. Pro zpětnou kompatibilitu vygeneruje správce oken událost 'opening' s příslibem, který bude vyřešen příslibem 'opened', když je okno nastaveno, připraveno a otevřeno.

Správce oken pak zavolá metodu getSetupDelay(), která získá počet milisekund pro čekání, než zavolá metodu okna getSetupProcess() a provede výsledek. Metoda getSetupProcess() sestaví proces pro nastavení okna s daty předávanými funkci otevírání. Pokaždé, když je okno znovu použito, může být nastaveno s novými daty. Po dokončení nastavení se z úvodního příslibu zobrazí oznámení o průběhu 'setup'.

Správce oken pak zavolá metodu getReadyDelay(), která získá počet milisekund pro čekání mezi dokončením nastavení a voláním metody okna getReadyProcess() a provedením výsledku. Oznámení o průběhu 'ready' je poté vydáno z příslibu otevření zpětné kompatibility.

Opened (otevřeno)

Když je okno nastaveno a připraveno, slib WindowInstance 'opened' je vyřešen a příslib zpětné kompatibility 'opening' je vyřešen příslibem zpětné kompatibility 'opened'. Okno je nyní otevřeno.  V tomto okamžiku je v pořádku nastavit fokus uvnitř okna.

Closing (zavírání)

Fáze zavírání začíná, když se k zavření okna použije metoda closeWindow() správce oken nebo metoda close() okna. Slib 'closing' společnosti WindowInstance je vyřešen. Pro zpětnou kompatibilitu vygeneruje správce oken událost 'closing' a příslib zpětné kompatibility 'opened' je vyřešen příslibem zpětné kompatibility 'closing'.

Správce oken volá metodu getHoldDelay(), která získá počet milisekund pro čekání, než zavolá metodu okna getHoldProcess() a provede výsledek. Zřídka je potřeba tuto metodu přepsat, i když by se to mohlo stát, pokud se rozbití okna vyžaduje dlouhou dobu a chcete mezitím vypnout ovládání okna. Když je proces pozastavení dokončen, ze závěrečného příslibu zpětné kompatibility se vydá oznámení o průběhu 'hold'.

Správce oken pak zavolá metodu getTeardownDelay(), která získá počet milisekund pro čekání mezi dokončením procesu pozastavení a voláním metody okna getTeardownProcess() a provedením výsledku. Oznámení o průběhu 'teardown' je vydáváno z příslibu uzavření zpětné kompatibility.

Closed (zavřeno)

Když je proces odstranění dokončen, příslib 'closed' společnosti WindowInstance je vyřešen, příslib uzavření zpětné kompatibility je vyřešen. Všechna data předaná metodě close() budou předána jako hodnota rozlišení do příslibu 'closed' společnosti WindowInstance a příslibu uzavření zpětné kompatibility. Okno je nyní zavřené.

Poznámky

Všimněte si, že každý proces (např. setup, ready, hold, teardown) se provádí v sérii, takže asynchronní zpracování může být dokončeno. Vždy předpokládejte, že procesy okna jsou prováděny asynchronně. Další podrobnosti o procesech najdete na stránce Procesy a chyby.

Zavřením okna bez dat jej bezpečně zavřete, aniž byste provedli jakékoli změny, což v podstatě zruší proces.

WindowManager lze také nakonfigurovat tak, aby zabránil interakci mimo okno (nastavením možnosti modal na 'true'). Úplný seznam podporovaných metod a možností konfigurace naleznete v dokumentaci na úrovni kódu.

Příklad použití WindowInstance

instance = windowManager.openWindow( ... );
instance.opening.then( function () {
    // Kód zde běží poté, co se okno začne otevírat.
} );
instance.opened.then( function () {
    // Kód zde běží po otevření okna.
} );
instance.closing.then( function () {
    // Kód zde běží poté, co se okno začne zavírat.
} );
instance.closed.then( function ( data ) {
    // Kód zde běží po zavření okna.
} );

Pokud chcete pouze otevřít okno a počkat, až se zavře, použijte:

windowManager.openWindow( ... ).closed.then( function ( data ) {
    // Kód zde běží po zavření okna.
} );