Вариант 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("
"); createPlayerDiv.css("width", "800px"); createPlayerDiv.css("border", "1px solid #afafaf"); var saveButton = jQuery("