将变量从组件模型传递到作者对话框

时间:2015-01-30 16:24:58

标签: cq5 aem sightly

我在Adobe AEM / CQ网站上有一个Sightly组件,其中包含(JavaScript)UseAPI model

在模型中,我有一个变量,它是在组件加载时计算出来的,并没有存储在JCR中(让我们说它是一个随机字符串)。

当作者打开Granite / Touch UI对话框时,会有一个使用JSP呈现的自定义Granite UI组件。 JSP可以访问JCR中组件的范围,但据我所知,它在访问组件时无法访问JavaScript模型返回的属性。

如何通过/存储此随机字符串'来自Sightly / JavaScript UseAP的变量,以便对话框的JSP可以访问它?

变量是上下文相关的,所以我不想将它存储在永久位置,例如JCR。一个很好的例子可能是外部Web服务的唯一标识符,对于该组件的特定呈现是唯一的。

1 个答案:

答案 0 :(得分:0)

我可以想到几种方法,具有不同的适用性:

  1. 对话框字段emptyText属性:这只显示灰色/提示文本,不会设置任何可能呈现的内容。
  2. 对话框字段defaultValue属性:这看起来非常诱人,但我不记得成功了。
  3. Dialog事件处理程序:(在对话框定义的XML中添加JavaScript)。我不是这种方法的粉丝,因为魔术发生的方式/地点并不明显。但是可以在对话框加载或对话框保存上更新/填充字段。
  4. 组件cq:template:就像页面模板一样,您可以在将组件拖到parsys中时提供默认内容。这对于组件cq:include进入页面/组件不起作用。此外,除非您在对话框中添加事件处理程序,否则它不会阻止作者完全删除该值。
  5. 创建组件模型。如果属性缺失或未填充,则模型可以提供默认内容/值。缺点是如果对话框字段为空,作者可能无法理解魔术值的来源。一旦我通过创建将使用创作值的标记解决了这个问题,然后回退到对话框emptyText属性,然后回到可能的模板值到"填写"内容。这需要一些初步的开发人员工作,但如果内容丢失,或者包含组件而不是拖动,则向作者提供提示,... YMMV。
  6. 但是,如果值为"上下文相关"这些都不适合您。并且必须在某处/以某种方式计算。但如果计算它,那么它可能不应该被创作。