【问题标题】:Getting to scope variables in client side javascript (CSJS) on XPages获取 XPage 上客户端 javascript (CSJS) 中的范围变量
【发布时间】:2012-03-05 14:42:16
【问题描述】:

我正在服务器端 javascript (SSJS) 按钮中设置 viewScope 变量。

viewScope.put("branchName",doc.getItemValueString("BranchName"))

如何在客户端访问该变量?

【问题讨论】:

    标签: xpages


    【解决方案1】:

    如果您需要从客户端脚本访问 viewScope 变量,您可以使用 xp:scriptBlock 标签来设置一些全局 javascript 变量。

    <xp:scriptBlock id="scriptBlock1">
    <xp:this.value><![CDATA[var myVar = #{javascript:viewScope.get("scopeVar")}]]></xp:this.value>
    </xp:scriptBlock>
    

    此方法的主要问题是内部服务器端 javascript 仅在最初呈现该元素或对元素执行部分刷新时计算,因此不能保证客户端 JS 变量设置为正确的值。

    【讨论】:

      【解决方案2】:

      您不能直接访问 viewScope 变量,但可以将其绑定到隐藏字段 然后通过 csjs 访问该值 XSP.getElementById("#{id:inputHidden1}").value

      还有其他方法可以访问它,例如使用 rpc 或 ajax 请求。

      【讨论】:

      • 隐藏在 CSS 端而不是在 XPage 端。否则它不会呈现给客户端。
      • 好吧,它通过隐藏类型的输入标签隐藏在 html 中,因此呈现如下。
      【解决方案3】:

      使用下面的代码:

      var value = "#{javascript:viewScope.variablename}"
      

      【讨论】:

        【解决方案4】:

        我会看一下扩展库中包含的 JSON RPC。该组件将允许您定义一个可能/可能不接受参数的 SSJS 函数。假设您添加了 ID 为 myRPC 的 RPC 和一个名为 getViewScopeVar 的方法,该方法接受单个 String 参数并返回 viewScope 变量的值,该变量的名称包含作为参数的名称。然后您可以像这样调用该方法:

        myRPC.getViewScopeVar("branchName")
        

        这是从客户端 javascript 与服务器端元素交互的最简单最有效的方式。此外,只要您将该 RPC 放在一个战略自定义控件上(即,就像每个 xpage 所基于的布局自定义控件),它就可以让您选择将所有必需的方法放在一个位置。

        【讨论】:

          【解决方案5】:

          如果您需要频繁更新,您可以使用扩展库中的 Ajax 服务。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-02-08
            • 1970-01-01
            • 1970-01-01
            • 2014-08-21
            • 2012-05-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多