How-to: Пользовательские компоненты (свойства)
Для каждого типа свойства по умолчанию используется свой предопределенный визуальный компонент для отображения и редактирования данных. Однако, существует возможность переопределять компоненты на свои собственные, создаваемые при помощи JavaScript. Эта функциональность поддерживается только в веб-клиенте.
Рассмотрим задачу по созданию чата для общения между пользователями с целью демонстрации этой возможности.
Доменная логика
Для начала создадим доменную логику, в которой определена сущность Сообщение. Каждое сооб щение содержит плоский текст, а также информацию об авторе и времени отправки.
CLASS Message 'Message';
dateTime 'Time' = DATA DATETIME (Message);
text 'Text' = DATA TEXT (Message);
author = DATA CustomUser (Message);
nameAuthor 'Author' (Message m) = name(author(m));
replyTo = DATA Message (Message);
nameAuthorReplyTo (Message m) = nameAuthor(replyTo(m));
textReplyTo (Message m) = text(replyTo(m));
Отображение списка сообщений
Список сообщений в чате на форме будем отображать как записи в таблице с одной колонкой. Для этой колонки будет изменен компонент отображения значения на тот, который будет написан на JavaScript. Проще всего значение представить в виде строки формата JSON, в которой будут храниться все параметры сообщения. Для формирования этой строки воспользуемся оператором JSON :
json (Message m) =
JSON FROM
author = nameAuthor(m),
time = dateTime(m),
text = text(m),
own = IF author(m) = currentUser() THEN 1 ELSE 0,
replyAuthor = nameAuthorReplyTo(m),
replyText = textReplyTo(m),
replyMessage = replyTo(m);
Пример значения:
{
"author":"John Doe",
"time":"2021-10-05T15:28:05",
"text":"Hello, Jack!",
"own":1,
"replyAuthor":"Jack Smith",
"replyText":"Hello, John",
"replyMessage":31302
}
Далее создадим при помощи JavaScript и CSS компонент, который будет отображать сообщения в браузере. Компонент создадим в файле chat.js, который расположим в папке resources/web.