【问题标题】:Xpages - Custom control getting a custom property from another custom controlXpages - 自定义控件从另一个自定义控件获取自定义属性
【发布时间】:2019-03-21 20:06:57
【问题描述】:

我搜索了谷歌和堆栈,但似乎无法找到明确的答案。我想做的是这样的:

假设我有自定义控件 A,其中是一个单选按钮,当我单击它时,我希望它获取在自定义控件 B 上设置的自定义属性,例如,compositeData.Name。我可以这样做吗?

如果我给自定义控件 B 一个 ID,比如说 ccB,自定义控件 A 中的单选按钮可以执行类似 getComponent("ccB").getValue().compositeData.Name 这样的操作吗?我使用自定义属性“名称”传递给自定义控件 B 的属性?

如果直接否定,至少我知道不要再玩弄这个主意了!谢谢

【问题讨论】:

  • 您的问题是基于是否可以完成。但你更应该关心的是为什么。您要完成的是反模式。你试图过度扩展组件的职责来控制和读取数据,这些数据并没有被赋予它。页面上的自定义控件应该对视图树中另一个自定义控件的存在一无所知。流程应该始终是自上而下的,以防某些事情需要触发特定行为以冒泡并被层次结构中的更高控制器捕获。你到底想做什么?
  • 将属性提取到 bean。并在compositeData 属性中使用这个bean。将 bean 放入 viewscope 或为此使用一些 viewscope 变量。
  • @shillem 我的顶级 CC 驱动较低级别的内容,例如显示/隐藏某些问题。如果问题 1 推动了问题 2 和 3,并且用户回答了问题 2 和 3,但随后改变了对问题 1 的想法,这意味着现在不需要问题 2 或 3 中的项目,我想抹去他们的一些价值观并做一些其他位。我在 Q1 上创建了一个自定义属性,其中包含一系列问题,如果满足某些条件,这些问题可以正常工作,但是某些字段名称例如是根据自定义属性值动态计算的,所以我想处理他们
  • Q1 中的自定义属性是指每个问题都是您的顶级 CC 嵌入的自定义控件?顶层是否与页面上是否存在这些问题 CC 有任何关系?这些问题是在 xsp 中硬编码还是动态生成(比如通过 xp:repeat 循环)?
  • @shillem 为了简单起见,假设我有 1 个自定义控件(问题和字段),其中大约 50 个在页面上。每个都具有相同的自定义属性,即问题文本和审核团队,但显然自定义属性具有不同的值传递到每个 cc。但是可以根据从包含问题 1 的自定义控件中选择的答案来显示或隐藏包含问题 3 的自定义控件。

标签: xpages


【解决方案1】:

从一个控件到达另一个控件的内部会破坏组件隔离。您可能想采取不同的方法:

选项 a - 客户端: 您的控件会发出一个冒泡的 JavaScript 事件,直到它到达包含您要更改的控件的父元素(可能是父 Dom 元素)。在那里设置该元素的属性。

选项 b - 服务器端: 正如 Urs 建议的那样:绑定到一个 bean 并处理 bean 内的更新

【讨论】:

  • 感谢 Stephan(以及所有发表评论的人)我已经接受了您的回答,并将在我的应用程序的第 2 版中实现这一点
猜你喜欢
  • 1970-01-01
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多