Замените содержимое simple.ts из примера в статье "Начало работы" следующим содержанием и пресоберите приложение:
/*Инструкции для WebPack, который скопирует эти файлы в ваш каталог*/import'./index.html';import'ui-organizer/page.css';import'ui-organizer/style.css';import'ui-organizer/vars.css';/*Описание формы simpleForm*/importtype {IForm, IList} from"ui-organizer";import { AppManager, UIList, UIForm} from"ui-organizer";exportletform: IForm = <IForm>{type:UIForm,name:'simpleForm',elements: [ <IList>{type:UIList } ]}letdata = ["Кофе","Чай","Прохладительные напитки"]/*Инициализация приложения AppManager*/varGlobal: any = window;Global.AppManager = AppManager;Global.onpopstate = AppManager.onPopState;AppManager.init(document.querySelector('#app')) .then(async ()=>{AppManager.add([form]);AppManager.open('simpleForm', data); })
Здесь мы создали простую форму с единственным элементом IList и передали ей данные data. Как вы можете заметить мы не указали какими элементами будут строки списка и откуда брать данные. Форма передала списку данные целиком и список увидев массив, просто сформировал из него строки списка.
/*Инструкции для WebPack, который скопирует эти файлы в ваш каталог*/import'./index.html';import'ui-organizer/page.css';import'ui-organizer/style.css';import'ui-organizer/vars.css';/*Описание формы simpleForm*/importtype {IForm, IList} from"ui-organizer";import { AppManager, UIList, UIForm } from"ui-organizer";exportletform: IForm = <IForm>{type:UIForm,name:'simpleForm',elements: [ <IList>{type:UIList,name:'myList',bindingProperty:'objectList' } ]}letdata = {objectList: [ {item:"Кофе",value:"Эспрессо" }, {item:"Чай",value:"Зеленый чай" }, {item:"Прохладительные напитки",value:"Апельсиновый сок" } ]}/*Инициализация приложения AppManager*/varGlobal: any = window;Global.AppManager = AppManager;Global.onpopstate = AppManager.onPopState;AppManager.init(document.querySelector('#app')) .then(async ()=>{AppManager.add([form]);AppManager.open('simpleForm', data); })
Как видите, мы добавили к элементу IList одно свойство bindingProperty, которое определяет откуда брать данные и изменили данные. Теперь списку передается массив объектов. Элемент IList устроен так, что если не указано дополнительно (как указать будет в следующем разделе), то текст строки списка - это значение первого ключа передаваемого объекта.
Причем, сами данные - это те самые объекты, которые передали. Вы можете убедится в этом вызвав средство разработчика в браузере (F12) и выполнив в консоли следующий код:
Для строки списка можно задать любой элемент формы, наследник IDataElement, например: IDataElement, IStr и др.
/*Инструкции для WebPack, который скопирует эти файлы в ваш каталог*/import'./index.html';import'ui-organizer/page.css';import'ui-organizer/style.css';import'ui-organizer/vars.css';/*Описание формы simpleForm*/importtype {IDataElement, IForm, IList} from"ui-organizer";import { AppManager, UIList, UIForm, UIDataElement} from"ui-organizer";exportletform: IForm = <IForm>{type:UIForm,name:'simpleForm',elements: [ <IList>{type:UIList,name:'myList',bindingProperty:'objectList',itemsElement: <IDataElement>{type:UIDataElement,bindingProperty:'value' } } ]}letdata = {objectList: [ {item:"Кофе",value:"Эспрессо" }, {item:"Чай",value:"Зеленый чай" }, {item:"Прохладительные напитки",value:"Апельсиновый сок" } ]}/*Инициализация приложения AppManager*/varGlobal: any = window;Global.AppManager = AppManager;Global.onpopstate = AppManager.onPopState;AppManager.init(document.querySelector('#app')) .then(async ()=>{AppManager.add([form]);AppManager.open('simpleForm', data); })
В IList мы добавили свойство itemsElement и присвоили ему объект IDataElement. Объекту IDataElement, в свою очередь, задали свойство bindingProperty: 'value'. Тем самым имеем список с текстом строк списка: "Эспрессо" и т.д.
На самом деле, когда свойство itemsElement не задано у элемента IList, то "под капотом" создается этот обьект IDataElement, и ему подставляются данные, как описано в первых двух разделах.
Здесь в элементе IList мы добавили метод onAfterSetData(), который вызывается после установки данных.
В этом методе мы перебираем строки списка. Для каждой строоки списка получаем доступ к элементу IDataElement следующим образом: (<IListItem>item).element. И присваеваем новое значение.
В список IList мы добавили меню IMenu с двумя кнопками: objectList и fooList. И в данные добавили еще один массив: fooList.
Кнопка с соответствующим названием подставляет в список одноименный массив. В событии onClick кнопок мы получаем у формы элемент IList с названием 'myList' и данные. И устанавливаем списку соответствующие данные.
Обратите внимание, что у спсика IList мы убрали свойство bindingProperty: 'objectList'.
Ну, и для демонстрации установили границу элемента - добавили свойство bordered: true.
Обратите внимание, что метод list.edit() не изменяeт данные. Для изменения данных в элемент myList мы добавили метод onAfterEdit(), в котором преобразуем данные так как нам надо.
Для просмотра данных в результате манипуляции со списком используйте следующий код в панели разработчика:
Содержание
Сразу посмотреть пример формы из раздела 8.
1. Просто список
Замените содержимое simple.ts из примера в статье "Начало работы" следующим содержанием и пресоберите приложение:
Здесь мы создали простую форму с единственным элементом IList и указали у элемента IList свойство value.
2. Cписок заполняем данными
Замените содержимое simple.ts из примера в статье "Начало работы" следующим содержанием и пресоберите приложение:
Здесь мы создали простую форму с единственным элементом IList и передали ей данные data. Как вы можете заметить мы не указали какими элементами будут строки списка и откуда брать данные.
Форма передала списку данные целиком и список увидев массив, просто сформировал из него строки списка.
3. Cписок с bindingProperty
Внесите изменения:
Как видите, мы добавили к элементу IList одно свойство
bindingProperty
, которое определяет откуда брать данные и изменили данные.Теперь списку передается массив объектов. Элемент IList устроен так, что если не указано дополнительно (как указать будет в следующем разделе), то текст строки списка - это значение первого ключа передаваемого объекта.
Причем, сами данные - это те самые объекты, которые передали. Вы можете убедится в этом вызвав средство разработчика в браузере (F12) и выполнив в консоли следующий код:
для выполнения этого кода мы в IList добавили свойство
name: 'myList'
.Если значением свойства item в данных будет объект, то тексту строки списка будет задано строковое представление этого объекта.
4. Список с заданным элементом строки
Для строки списка можно задать любой элемент формы, наследник IDataElement, например: IDataElement, IStr и др.
В IList мы добавили свойство itemsElement и присвоили ему объект IDataElement. Объекту IDataElement, в свою очередь, задали свойство bindingProperty: 'value'. Тем самым имеем список с текстом строк списка: "Эспрессо" и т.д.
На самом деле, когда свойство itemsElement не задано у элемента IList, то "под капотом" создается этот обьект IDataElement, и ему подставляются данные, как описано в первых двух разделах.
5. Изменение списка в runtime
Список заполняется в результате установки данных, но в runtime (после установки данных) мы можем обработать эти данные и изменить строки списка.
Здесь в элементе IList мы добавили метод onAfterSetData(), который вызывается после установки данных.
В этом методе мы перебираем строки списка. Для каждой строоки списка получаем доступ к элементу IDataElement следующим образом:
(<IListItem>item).element
. И присваеваем новое значение.Вы можете реализовать это немного по-другому:
Здесь мы добавили метод onAfterSetData() уже в элементе IDataElement. Чтобы работать с данными - объектом
в этом элементе, мы убрали свойство
bindingProperty: 'value'
.6. Добавление меню в список и установка окантовки
В список IList мы добавили меню IMenu с двумя кнопками: objectList и fooList. И в данные добавили еще один массив: fooList.
Кнопка с соответствующим названием подставляет в список одноименный массив.
В событии onClick кнопок мы получаем у формы элемент IList с названием 'myList' и данные. И устанавливаем списку соответствующие данные.
Обратите внимание, что у спсика IList мы убрали свойство
bindingProperty: 'objectList'
.Ну, и для демонстрации установили границу элемента - добавили свойство
bordered: true
.7. Кнопки с пиктограммами FontAwesome
Для использования пиктограмм FontAwesome можете указать на html странице таблицу стилей с font awesome.
index.html
Но, в связи с блокированием cdn сервисов в России этот вариант вас может не устроить. Вы можете сделать по-другому - скачать бибилиотеку fontawesome:
Смотреть как...
Установите необходимые библиотеки:
Измените файл webpack.config.js добавив copy-webpack-plugin: ```javascript const path = require('path'); const UIOrganizerWebpackPlugin = require('ui-organizer-webpack-plugin'); /---Добавили copy-webpack-plugin/ const CopyPlugin = require("copy-webpack-plugin"); /---/
module.exports = { mode: 'development', entry: './simple.ts', output: { filename: 'index.js', path: path.resolve(__dirname,
./dist
), assetModuleFilename: '[name][ext]' }, module: { rules: [ { test: /.ts?$/, use: 'ts-loader' }, { test: /.css$/, type: 'asset/resource',}, { test: /.html$/, type: 'asset/resource', },
], }, plugins: [ new UIOrganizerWebpackPlugin(), /---Добавили copy-webpack-plugin*/
new CopyPlugin({ patterns: [ /*Копируем шрифты и таблицы стилей в папку ./dist/ { from: "./node_modules/@fortawesome/fontawesome-free", to: "./fontawesome-free" }, ], }), /---*/ ], resolve: { extensions: ['.ts', '.js'], } };
Для каждой кнопки меню IMenuItem и списка IList укажите свойство figAwesome.
simple.ts
Можете разместить меню с любой стороны списка. Например для размещения слева укажите:
menuPosition: Position.left
,grouping: Grouping.vertical
.8. Добавление, удаление и редактирование строк списка
Для использования пиктограмм FontAwesome укажите на html странице таблицу стилей с font awesome см. раздел 7.
В примере ниже мы добавили три кнопки (описали меню с тремя кнопками отдельно в переменной
menu
):Обратите внимание, что метод
list.edit()
не изменяeт данные. Для изменения данных в элементmyList
мы добавили методonAfterEdit()
, в котором преобразуем данные так как нам надо.Для просмотра данных в результате манипуляции со списком используйте следующий код в панели разработчика:
simple.ts
Generated using TypeDoc