Замените содержимое simple.ts из примера в статье "Начало работы" следующим содержанием и пресоберите приложение:
/*Инструкции для WebPack, который скопирует эти файлы в ваш каталог*/import'./index.html';import'ui-organizer/page.css';import'ui-organizer/style.css';import'ui-organizer/vars.css';import { AppManager } from"ui-organizer";//Импортируем объект - AppManagerimporttype {IForm, IElement} from"ui-organizer";exportletform: IForm = <IForm>{//Описываем формуtype:'IForm',name:'simpleForm',elements: [ <IElement>{type:'IElement',value:'Элемент' } ]}varGlobal: any = window;Global.AppManager = AppManager; //Передаем AppManager на глобальный уровень для доступа к нему из любого места приложенияGlobal.onpopstate = AppManager.onPopState; //Переопределяем функцию для возможности навигации между формамиAppManager.init(document.querySelector('#app'))//Инициализирум приложение и устанавливаем корневой HTMLElement для приложения .then(()=>{AppManager.add([form]);//Добавляем форму в список форм приложенияAppManager.open(form.name, {});//Открываем форму и передаем ей пустые данные })
Первое, мы импортируем объект AppManger из библиотеки ui-organizer:
import { AppManager } from"ui-organizer";
Заметьте, что импортируем именно объект AppManager. Поэтому, создается только одно приложение на странице.
Второе, мы объявляем объект AppManager на глобальном уровне:
varGlobal: any = window;Global.AppManager = AppManager; Global.onpopstate = AppManager.onPopState;
Это необходимо для того, чтобы иметь доступ к объекту из любой части программы, а также из консоли браузера для отладки. Например, в консоли вы можете написать следующий код для просмотра данных элемента управления:
AppManager.activeForm.getElement('myList').getData();
Для навигации между формами, вам нужно переопределить метод onpopstate.
Без этого второго акта приложение запустится, но мы настоятельно рекомендуем его выполнять.
Третье, инициализируем приложение, указываем HTML элемент, в который встроим нашу форму:
AppManager.init(document.querySelector('#app'))
После открытия формы получим следующий HTML, где все, начиная с <div class="ui-app">, построит программа:
В предыдущем разделе мы открыли форму следующим образом:
AppManager.open(form.name, {});
В следующем примере используются три метода:
AppManager.load(),
AppManager.setData(),
AppManager.activate().
Результат получаем тот же самый, что и в первом разделе.
/*Инструкции для WebPack, который скопирует эти файлы в ваш каталог*/import'./index.html';import'ui-organizer/page.css';import'ui-organizer/style.css';import'ui-organizer/vars.css';import { AppManager } from"ui-organizer";//Импортируем объект - AppManagerimporttype {IForm, IElement} from"ui-organizer";exportletform: IForm = <IForm>{//Описываем формуtype:'IForm',name:'simpleForm',elements: [ <IElement>{type:'IElement',value:'Элемент' } ],asynconBeforeLoad(event, form, elem) {console.log(event.data); },asynconBeforeSetData(event, form, elem) {console.log(event.data); }}varGlobal: any = window;Global.AppManager = AppManager; //Передаем AppManager на глобальный уровень для доступа к нему из любого места приложенияGlobal.onpopstate = AppManager.onPopState; //Переопределяем функцию для возможности навигации между формамиAppManager.init(document.querySelector('#app'))//Инициализирум приложение и устанавливаем корневой HTMLElement для приложения .then(()=>{AppManager.add([form]);//Добавляем форму в список форм приложенияsetTimeout(async () => {awaitAppManager.load(form.name, { data:"loadform" });//Загружаем формуsetTimeout(async () => {awaitAppManager.setData(form.name, { data:"setdata" });//Устанаваливаем данныеsetTimeout(() => {AppManager.activate(form.name);//Включаем видимость }, 1000); }, 1000); }); })
Задержку setTimeout() мы использовали для того, чтобы показать последовательное выполнение этих методов.
В результате выполнения AppManager.load() вызывается метод onBeforeLoad и в консоли мы выводим данные, переданные в метод load.
Через секунду, в результате выполнения AppManager.setData(), вызывается метод onBeforeSetData и в консоли мы выводим данные, переданные в метод setData.
Еще через секунду, в результате выполнения AppManager.activate(), форма отображается.
ПРИМЕЧАНИЕ! Данные, переданные в метод AppManager.load() доступны только в onBeforeLoad и onAfterLoad. В форму не устанавливаются.
/*Инструкции для WebPack, который скопирует эти файлы в ваш каталог*/import'./index.html';import'ui-organizer/page.css';import'ui-organizer/style.css';import'ui-organizer/vars.css';/*Описание формы simpleForm*/import { AppManager } from"ui-organizer";//Импортируем объект - AppManagerimporttype { IForm, IElement } from"ui-organizer";exportletform: IForm = <IForm>{//Описываем форму одинtype:'IForm',name:'simpleForm',caption:'Форма один',elements: [ <IElement>{type:'IElement',value:'Двойной клик, чтобы редактировать',bordered:true,asynconDblClick(){this.edit(); } }, <IElement>{type:'IElement',value:'Клик, чтобы открыть форму два',bordered:true,asynconClick(){AppManager.activate(form2.name);;//Активируем форму два } } ]}exportletform2: IForm = <IForm>{//Описываем форму дваtype:'IForm',name:'secondForm',caption:'Форма два',elements: [ <IElement>{type:'IElement',value:'Двойной клик, чтобы редактировать',bordered:true,asynconDblClick(){this.edit(); } }, <IElement>{type:'IElement',value:'Клик, чтобы вернуться',bordered:true,asynconClick(){AppManager.activate(form.name);//Активируем форму один } } ]}varGlobal: any = window;Global.AppManager = AppManager; //Передаем AppManager на глобальный уровень для доступа к нему из любого места приложенияGlobal.onpopstate = AppManager.onPopState; //Переопределяем функцию для возможности навигации между формамиAppManager.init(document.querySelector('#app'))//Инициализирум приложение и устанавливаем корневой HTMLElement для приложения .then(async ()=>{AppManager.add([form, form2]);//Добавляем формы в список форм приложенияawaitAppManager.load(form.name, {})//Загружаем форму один awaitAppManager.load(form2.name, {});//Загружаем форму дваAppManager.activate(form.name);//Активируем (включаем видимость) форму один })
Мы создали две формы form и form2. Первый элемент в каждой форме для демонстрации сохранения данных формы, второй элемент для переключения между формами.
Обе формы для открытия другой формы используют метод AppManager.activate().
Это возможно, потому что мы заранее загрузили обе формы:
awaitAppManager.load(form.name, {})//Загружаем форму один awaitAppManager.load(form2.name, {});//Загружаем форму два
/*Инструкции для WebPack, который скопирует эти файлы в ваш каталог*/import'./index.html';import'ui-organizer/page.css';import'ui-organizer/style.css';import'ui-organizer/vars.css';import { AppManager } from"ui-organizer";//Импортируем объект - AppManagerimporttype {IForm, IElement} from"ui-organizer";exportletform: IForm = <IForm>{//Описываем форму одинtype:'IForm',name:'simpleForm',caption:'Форма один',elements: [ <IElement>{type:'IElement',value:'Двойной клик, чтобы редактировать',bordered:true,asynconDblClick(){this.edit(); } }, <IElement>{type:'IElement',value:'Клик, чтобы открыть форму два',bordered:true,asynconClick(){AppManager.open(form2.name, {}, this.form);//Открываем форму два } } ]}exportletform2: IForm = <IForm>{//Описываем форму дваtype:'IForm',name:'secondForm',caption:'Форма два',elements: [ <IElement>{type:'IElement',value:'Двойной клик, чтобы редактировать',bordered:true,asynconDblClick(){this.edit(); } }, <IElement>{type:'IElement',value:'Клик, чтобы вернуться',bordered:true,asynconClick(){AppManager.back();//Возвращаемся к форме один } } ]}varGlobal: any = window;Global.AppManager = AppManager; //Передаем AppManager на глобальный уровень для доступа к нему из любого места приложенияGlobal.onpopstate = AppManager.onPopState; //Переопределяем функцию для возможности навигации между формамиAppManager.init(document.querySelector('#app'))//Инициализирум приложение и устанавливаем корневой HTMLElement для приложения .then(async ()=>{AppManager.add([form, form2]);//Добавляем формы в список форм приложенияAppManager.open(form.name, {}); //Открываем форму один и передаем ей данные })
Мы создали две формы form и form2. Первый элемент в каждой форме для демонстрации сохранения данных формы, второй элемент для переключения между формами.
В первой форме клик по элементу вызывает открытие формы два:
AppManager.open(form2.name, {}, this.form);//Открываем форму два
Во второй форме клик по элементу вызывает команду "Назад" в истории браузера:
AppManager.back();//Возвращаемся к форме один
Именно для этого мы переопределили метод onpopstate, заменив его на AppManager.onPopState.
Обратите внимание, что навигация между формами идентична разделу три. Это потому, что вызов метода AppManger.open() не загружает каждый раз форму заново, а проверяет в списке уже загруженных. И метод AppManager.back() также вызывает метод активации формы, сохраненной в истории браузера.
Но, во втором способе, описанном в этом разделе, мы можем каждый раз передавать данные открываемой форме.
Содержание
1. AppManager и основное использование
Замените содержимое simple.ts из примера в статье "Начало работы" следующим содержанием и пресоберите приложение:
Первое, мы импортируем объект AppManger из библиотеки ui-organizer:
Заметьте, что импортируем именно объект AppManager. Поэтому, создается только одно приложение на странице.
Второе, мы объявляем объект AppManager на глобальном уровне:
Это необходимо для того, чтобы иметь доступ к объекту из любой части программы, а также из консоли браузера для отладки. Например, в консоли вы можете написать следующий код для просмотра данных элемента управления:
AppManager.activeForm.getElement('myList').getData();
Для навигации между формами, вам нужно переопределить метод
onpopstate
.Без этого второго акта приложение запустится, но мы настоятельно рекомендуем его выполнять.
Третье, инициализируем приложение, указываем HTML элемент, в который встроим нашу форму:
После открытия формы получим следующий HTML, где все, начиная с
<div class="ui-app">
, построит программа:Четвертое, добавляем форму в приложение - передаем в метод add() массив объектов с описанием форм:
Пятое, открываем форму:
2. Открытие формы
В предыдущем разделе мы открыли форму следующим образом:
В следующем примере используются три метода:
Результат получаем тот же самый, что и в первом разделе.
Задержку setTimeout() мы использовали для того, чтобы показать последовательное выполнение этих методов.
В результате выполнения
AppManager.load()
вызывается метод onBeforeLoad и в консоли мы выводим данные, переданные в метод load.Через секунду, в результате выполнения
AppManager.setData()
, вызывается метод onBeforeSetData и в консоли мы выводим данные, переданные в метод setData.Еще через секунду, в результате выполнения
AppManager.activate()
, форма отображается.ПРИМЕЧАНИЕ! Данные, переданные в метод
AppManager.load()
доступны только в onBeforeLoad и onAfterLoad. В форму не устанавливаются.3. Несколько форм и навигация между ними
Мы создали две формы
form
иform2
. Первый элемент в каждой форме для демонстрации сохранения данных формы, второй элемент для переключения между формами.Обе формы для открытия другой формы используют метод
AppManager.activate()
.Это возможно, потому что мы заранее загрузили обе формы:
4. Навигация (другой способ)
Мы создали две формы
form
иform2
. Первый элемент в каждой форме для демонстрации сохранения данных формы, второй элемент для переключения между формами.В первой форме клик по элементу вызывает открытие формы два:
Во второй форме клик по элементу вызывает команду "Назад" в истории браузера:
Именно для этого мы переопределили метод
onpopstate
, заменив его наAppManager.onPopState
.Обратите внимание, что навигация между формами идентична разделу три. Это потому, что вызов метода
AppManger.open()
не загружает каждый раз форму заново, а проверяет в списке уже загруженных. И методAppManager.back()
также вызывает метод активации формы, сохраненной в истории браузера.Но, во втором способе, описанном в этом разделе, мы можем каждый раз передавать данные открываемой форме.
Generated using TypeDoc