在AEM的触摸界面对话框中从外部服务动态加载选择选项?

在AEM的触摸界面对话框中从外部服务动态加载选择选项?,aem,aem-6,aem-touch-ui,Aem,Aem 6,Aem Touch Ui,我的问题是在带有动态选项的TouchUI对话框中加载选择字段。这些选项来自一个通过webservices的外部URL,我使用在一个全局javascript对象中定义的URL来使用这个RESTful服务,比如 $.get(mec.serviceConfig.baseUrl + '/movies'; 请理解,这些选项来自第三方Web服务,请不要提及数据源。每当我搜索动态加载选择选项时,我都会得到本教程 这不是我想要的 在经典UI中,使用optionsProvider很容易 在TouchUI中,我

我的问题是在带有动态选项的TouchUI对话框中加载选择字段。这些选项来自一个通过webservices的外部URL,我使用在一个全局javascript对象中定义的URL来使用这个RESTful服务,比如

$.get(mec.serviceConfig.baseUrl + '/movies';
请理解,这些选项来自第三方Web服务,请不要提及数据源。每当我搜索动态加载选择选项时,我都会得到本教程

这不是我想要的

在经典UI中,使用optionsProvider很容易

在TouchUI中,我试图编写一个脚本,在对话框加载时通过AJAX从外部Web服务获取数据,并在选择字段中设置这些选项


有没有更好更简单的方法?有人可以分享代码片段吗

您应该为组件创建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
});

请参阅文档:

我不确定您为什么不想使用正确的数据源?您可以编写一个漂亮、干净、可测试的Java类,从远程服务获取项目。最后,它只是一个为特定资源类型注册的Sling Servlet,然后在TouchUI中将数据源设置为该资源类型。调用servlet并返回数据源。如果需要,我可以为您提供一个代码示例。您的意思是,我应该调用SlingServlet,它将使用HTTpGet在内部调用此服务并返回值,而不是通过javascript直接访问此服务。。。duh@Jens太过分了。只需在选择选项中获得一些键值对/选项,用于一种创作模式,即触摸,并且仅用于作者模式。最后,您可以编写一些JS代码来完成所有这些。但根据我的经验,这些通常是脆弱的解决方案,很难可靠地编写测试并多年维护等等。您正在用一种更健壮的Java解决方案与一种更易于用Javascript实现的解决方案进行交易,尽管如果是这样的话,我们就不会进行这种对话。最后,你必须根据你的项目需求来决定。我完全同意@Jens,我在你的另一个问题中也说过同样的话。baseurl可能是在您的JS中硬编码的,但这没有理由开始搞砸其他事情。url应来自您的aem应用程序,例如,后端应将此url传递给前端,反之亦然。因此,这里的架构似乎走错了方向。例如,您可以通过OSGI设置基本url,并将其传递给某个JS配置或使用ajax获取。但是您也可以使用后端服务实现其他东西作为数据源,例如,您在后端拥有所需的所有数据。