0

我在Adob​​e AEM/CQ 站点中有一个带有 (JavaScript) UseAPI 模型的Sightly组件。

在模型中,我有一个变量,它是在组件加载时计算的,而不是存储在 JCR 中(假设它是一个随机字符串)。

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

如何从 Sightly/JavaScript UseAPI 传递/存储这个“随机字符串”变量,以便对话框的 JSP 可以访问它?

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

4

1 回答 1

0

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

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

但是,如果该值是“上下文敏感的”并且必须在某处/以某种方式计算,则这些都不适合您。但如果它是计算出来的,那么它可能不应该被创作。

于 2015-02-12T21:41:41.383 回答