【发布时间】:2012-03-05 14:42:16
【问题描述】:
我正在服务器端 javascript (SSJS) 按钮中设置 viewScope 变量。
viewScope.put("branchName",doc.getItemValueString("BranchName"))
如何在客户端访问该变量?
【问题讨论】:
标签: xpages
我正在服务器端 javascript (SSJS) 按钮中设置 viewScope 变量。
viewScope.put("branchName",doc.getItemValueString("BranchName"))
如何在客户端访问该变量?
【问题讨论】:
标签: xpages
如果您需要从客户端脚本访问 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 变量设置为正确的值。
【讨论】:
您不能直接访问 viewScope 变量,但可以将其绑定到隐藏字段 然后通过 csjs 访问该值 XSP.getElementById("#{id:inputHidden1}").value
还有其他方法可以访问它,例如使用 rpc 或 ajax 请求。
【讨论】:
使用下面的代码:
var value = "#{javascript:viewScope.variablename}"
【讨论】:
我会看一下扩展库中包含的 JSON RPC。该组件将允许您定义一个可能/可能不接受参数的 SSJS 函数。假设您添加了 ID 为 myRPC 的 RPC 和一个名为 getViewScopeVar 的方法,该方法接受单个 String 参数并返回 viewScope 变量的值,该变量的名称包含作为参数的名称。然后您可以像这样调用该方法:
myRPC.getViewScopeVar("branchName")
这是从客户端 javascript 与服务器端元素交互的最简单最有效的方式。此外,只要您将该 RPC 放在一个战略自定义控件上(即,就像每个 xpage 所基于的布局自定义控件),它就可以让您选择将所有必需的方法放在一个位置。
【讨论】:
如果您需要频繁更新,您可以使用扩展库中的 Ajax 服务。
【讨论】: