Загружать параметры выбора динамически из внешней службы в диалоговом окне Touch UI в AEM?

Моя проблема - загрузить поле выбора в диалоговом окне сенсорного интерфейса с динамическими параметрами. Эти параметры поступают из внешнего URL-адреса через веб-службы, я использую эти службы RESTful, используя URL-адрес, определенный в одном из наших глобальных объектов javascript, например

$.get(mec.serviceConfig.baseUrl + '/movies';

Пожалуйста, поймите, что параметры исходят от стороннего веб-сервиса, пожалуйста, не указывайте источник данных. Всякий раз, когда я ищу динамическую загрузку опций выбора, я получаю это руководство

Ссылка на руководство Это не что я хочу.

В классическом интерфейсе это просто с помощью optionsProvider.

В сенсорном пользовательском интерфейсе я пытаюсь написать сценарий, который извлекает данные из внешнего веб-сервиса через загрузку AJAX ON DIALOG и устанавливает эти параметры в поле выбора.

Есть ли более простой подход? Кто-нибудь может поделиться фрагментами кода?


person Oliver    schedule 12.04.2018    source источник
comment
Я не уверен, почему вы не хотите использовать правильный Datasource? Вы могли бы написать красивый, чистый и тестируемый Java-класс, который извлекает элементы из вашей удаленной службы. В конце концов, это просто сервлет (Sling), зарегистрированный для определенного типа ресурса, а затем в TouchUI вы устанавливаете свой источник данных для этого типа ресурса. Сервлет вызывается и возвращает источник данных. Если хотите, я могу предоставить вам для этого пример кода.   -  person Jens    schedule 12.04.2018
comment
Это mec.serviceConfig.baseUrl - переменная javascript, имеющая URL-адрес веб-службы. вы говорите, что вместо того, чтобы нажимать это напрямую через javascript, я должен вызвать сервлет sling, который будет внутренне вызывать эту службу с помощью HTTpGet и возвращать значения ...   -  person Oliver    schedule 12.04.2018
comment
@Jens Так много над головой. Просто чтобы получить некоторые пары / параметры ключ-значение, доступные в параметре выбора, для одного режима разработки, то есть прикосновения и для использования только в режиме автора.   -  person Oliver    schedule 12.04.2018
comment
В конце концов, вы всегда можете написать какой-нибудь JS-код, который сделает все это. Но по моему опыту, это часто хрупкие решения, для которых трудно надежно писать тесты и поддерживать их в течение многих лет и т. Д. Вы торгуете потенциально более надежным решением на Java с решением, которое легче реализовать на Javascript (хотя, если бы это было в случае, если бы у нас не было этого разговора). В конце концов, вы должны принять решение, исходя из требований вашего проекта.   -  person Jens    schedule 12.04.2018
comment
Я полностью согласен с @Jens, я сказал то же самое в другом вашем вопросе. Возможно, baseurl жестко запрограммирован в вашем JS, но это не повод начинать портить другие вещи. URL-адрес должен поступать из вашего приложения AEM (например, серверная часть должна передавать этот URL-адрес во внешний интерфейс, а не наоборот). Так что архитектура здесь, кажется, идет не в том направлении. Вы можете установить свой базовый URL-адрес, например, через OSGI и передать его в некоторую конфигурацию JS (или получить его с помощью ajax). Но вы можете использовать свою серверную службу для реализации и других вещей в качестве источника данных, например, поскольку у вас есть все данные, которые вам нужны в серверной части.   -  person d33t    schedule 12.04.2018
comment
@ d33t По моему опыту, лучший способ перенести конфигурацию OSGI в «TouchUI» JavaScript - использовать PageInfoProvider. Также красивый, чистый и короткий Java-класс, который может добавлять значения в ns.pageInfo.   -  person Jens    schedule 12.04.2018
comment
@Jens Итак, базовый URL-адрес взят из конфигурации OSGi. Я думал, что писать источник данных - это слишком много накладных расходов, если он извлекает базовый URL-адрес из файла конфигурации OSGi, затем выполняет HTTP-вызов Get, а затем переходит к параметрам выбора. Слишком много дел за слишком маленькое. Надеюсь, вы понимаете, что я пытаюсь сказать.   -  person Oliver    schedule 12.04.2018
comment
@ d33t Пожалуйста, прочтите комментарий выше. Спасибо   -  person Oliver    schedule 12.04.2018
comment
нет, это не так уж и много, и это быстро внедряется опытным разработчиком, который знает, что делает. Попытайтесь реализовать эти вещи так, чтобы каждый разработчик AEM мог это понять. придерживайтесь лучших практик Adobe и рекомендуемых способов работы с aem. таким образом вы можете быть уверены, что ваше решение будет работать, даже если пользовательский интерфейс коралла полностью изменится.   -  person d33t    schedule 13.04.2018


Ответы (1)


вы должны создать прослушиватель JS для своего компонента.

$document.on("dialog-ready", function() {
// there you should find your select field 
//for example
var language = $("[name='./language']").closest(".coral-Select");
//then append to your select field new options from your datasource
});

см. документ: Динамическое обновление полей выбора диалогового окна AEM TouchUI

person Prosis    schedule 06.09.2018