【问题标题】:How do I access a repeat control from the outside e.g. via CSJS如何从外部访问重复控件,例如通过 CSJS
【发布时间】:2015-07-23 07:28:19
【问题描述】:

我如何/应该如何从外部访问重复控件?在我的情况下,我想为重复控件中的项目计算一些附加值,并使用 jquery 更新每个项目。

【问题讨论】:

  • 你可以给项目一个类并使用 $(".classname").. 对它们做一些事情。
  • 好的,我知道应该可以工作。有没有你可能知道的 SSJS 替代方案?
  • 我有点困惑 - jquery 是一个客户端库,所以它必须在页面加载后在浏览器中运行。 SSJS 将是服务器端(当然),所以那里没有可用的 jquery.. 问题出在哪里?你需要像 jquery 这样的东西,但对于服务器端?我想答案只是更多的 SSJS
  • 不,我对这两个选项都感兴趣:带有 jquery 和 SSJS 的 CSJS。

标签: xpages


【解决方案1】:

在 SSJS 中,您总是使用 getComponent("id") 访问组件。如果您的重复内容只是一个视图而不是在 XPage 级别定义视图数据源,而不是重复,您可以使用数据源的 id 来获取视图对象,即 view1。

【讨论】:

    【解决方案2】:

    在 SSJS 中,您可以通过 getComponent() 访问重复控件本身。但是,如果您想访问重复中的组件,则更具挑战性。

    默认行为是为重复创建单个“行”组件,然后在渲染响应阶段迭代它们以生成适当行数的相关 HTML(重复的rows 属性控件)从相关起点(重复控件的first 属性,可能已由寻呼机递增),从相关数据(重复的value 属性)中选取数据。

    如果重复设置了repeatControls="true",则在页面加载时,运行时会为适当的行数创建一组控件(重复控件的rows 属性)。但是,访问它们可能仍然是一个挑战。这也将取消使用寻呼机的能力。

    如果你想操纵例如重复中的适当视图条目,一个选项可能是通过每行中的计算属性将 UNID / Note ID 加载到 viewScope 中。例如。

    rendered="#{javascript:if (view.isRenderingPhase()) {
      if (idex == 1) viewScope.put("myVar", new java.util.ArrayList());
      viewScope.get("myVar").add(entry.getNoteID());
      return true;
    } else {
      return true;
    }"
    

    这将初始化(或重新初始化)viewScope 变量,如果它是第一行(请仔细检查第一行的 idex 为 1,idex 是您为 indexVar 属性定义的变量名重复控制),并将 NoteID 添加到列表中。所以元素 0 是第一行的 NoteID,元素 1 是第二行的 Note ID 等等。

    如果您希望操作值,您可以通过使用动态绑定采取类似的方法。 StackOverflow 上有各种关于重复控件的动态绑定以及博客文章的问题,可能由 Tim Tripcony 或 Jesse Gallagher 提出。

    除此之外,CSJS 可能是操作重复内容的最简单方法。请注意,如果您进行部分刷新,其 refreshId 是重复的,它可能会替换您在客户端所做的任何事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 2022-06-30
      • 1970-01-01
      • 2016-10-28
      相关资源
      最近更新 更多