Вариант 5. Создание нового компонента
-------------------------------------
На текущую форму «Заявка на закуп» добавлен компонент «Пользовательский компонент».
В его настройках значением выбран такой пользовательский компонент, который
позволяет выбрать поставщика и посмотреть о нем подробную информацию.
HTML и JavaScript коды такого пользовательского компонента приведены ниже.
Список доступных действий:
* выбор записи реестра поставщиков из диалогового окна с помощью кликабельного лейбла Выбрать из реестра (доступен всегда), в котором столбцы - это отображаемые поля реестра;
* ручной ввод и подбор результатов среди записей реестра поставщиков (поиск производится по всем полям);
* значения в выпадающем списке составлены из полей диалога (т.е. отображаемых полей реестра), разделенных тире;
* выбранное значение компонента меняет его внешний вид: поле ввода заменяется на подчеркнутый и кликабельный лейбл, составленный из значащего содержимого этого реестра;
* по нажатию на выбранную запись происходит открытие в диалоговом окне проигрывателя формы, который отображает эту запись из реестра поставщиков в режиме просмотра;
* создание новой записи в реестре поставщиков прямо из текущей формы с помощью кликабельного лейбла +Создать (доступен всегда): проигрыватель формы в режиме редактирования открывается в диалоговом окне;
* удаление текущего значения компонента с помощью кликабельного лейбла х Удалить (доступен только в случае, когда в компоненте выбрано какое-либо значение): компонент очищается и снова принимает вид поля ввода.
.. raw:: html
Исходный код JavaScript и CSS формы аналогичны :ref:`extfp-usecases-uc1-label`.
HTML код пользовательского компонента:
.. code-block:: xml
+Создать
Выбрать из реестра
✕ Удалить
JavaScript код пользовательского компонента:
.. code-block:: javascript
/* инициализация модели */
/**
* текстовое значение записи реестра
* @type {string}
*/
model.textValue = "";
/**
* идентификатор файла по форме выбранной записи реестра
* @type {string}
*/
model.asfDataId = null;
/**
* метод должен возвращать идентификатор реестра, можно переопределить в скрипте пользовательского компонента
* @returns {string}
*/
if (!model.getRegistryID) {
model.getRegistryID = function () {
return "d67afba7-8f16-4f7e-a920-1eceb694f646";
};
}
/**
* обновить текстовое представление записи реестра
*/
model.updateTextView = function () {
if (!model.getValue()) {
model.textValue = "";
model.asfDataId = null;
model.trigger(AS.FORMS.EVENT_TYPE.dataLoad, [model]);
return;
}
AS.FORMS.ApiUtils.getAsfDataUUID(model.getValue(), function (newAsfDataId) {
model.asfDataId = newAsfDataId;
AS.FORMS.ApiUtils.getDocMeaningContent(model.getRegistryID(), newAsfDataId, function (text) {
model.textValue = text;
model.trigger(AS.FORMS.EVENT_TYPE.dataLoad, [model]);
});
});
};
/**
* получить тестовое представление записи реестра
* @returns {string|string|*}
*/
model.getTextValue = function () {
return model.textValue;
};
// подписываемся на событие модели об изменении содержания, чтобы подгрузить дополнительные данные
model.on(AS.FORMS.EVENT_TYPE.valueChange, function () {
model.updateTextView();
});
/**
* метод реализовывает вставку asfData
* @param asfData
*/
model.setAsfData = function (asfData) {
model.setValue(asfData.key);
};
/**
* метод реализовывает получение данных компонента для сохранения
* @param blockNumber
* @returns {*}
*/
model.getAsfData = function (blockNumber) {
return AS.FORMS.ASFDataUtils.getBaseAsfData(model.asfProperty, blockNumber, model.textValue, model.value);
};
/* инициализация отображения */
/**
* реестр
* @type {object}
*/
var registry = null;
/**
* видимые колонки реестра
* @type {Array}
*/
var registryColumns = [];
/**
* поле ввода для поиска записей реестра
* @type {XMLList|*}
*/
var input = jQuery(view.container).children("[innerId='name']");
/**
* поле для отображения выбранной записи реестра
* @type {XMLList|*}
*/
var textView = jQuery(view.container).children("[innerId='textView']");
/**
* кнопка добавления записи
* @type {XMLList|*}
*/
var addIcon = jQuery(view.container).children("[innerId='add']");
/**
* кнопка выбора записи из реестра
* @type {XMLList|*}
*/
var browseIcon = jQuery(view.container).children("[innerId='browse']");
/**
* кнопка удаления текущей выбранной записи
* @type {XMLList|*}
*/
var deleteIcon = jQuery(view.container).children("[innerId='delete']");
// кнопку удаления текущей выбраннйо записи скрываем
deleteIcon.hide();
// по нажатию на кнопку "выбрать из реестра" открываем стандратный диалог выбра записи реестра
browseIcon.click(function () {
AS.SERVICES.showRegisterLinkDialog(registry, function (documentId) {
model.setValue(documentId);
});
});
// по нажатию на кнопку "создать" открываем форму создания записи реестра
addIcon.click(function () {
if (!registry.rr_create) {
alert("У вас нет прав на создание записей данного реестра");
return;
}
var createPlayerDiv = jQuery("