在XPage上获取客户端javascript(CSJS)中的变量范围

Bru*_*ski 6 xpages

我在服务器端javascript(SSJS)按钮中设置了一个viewScope变量.

viewScope.put( "分支名称",doc.getItemValueString( "分支名称"))

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

Dec*_*nch 14

如果需要从客户端脚本访问viewScope变量,可以使用xp:scriptBlock标记设置许多全局javascript变量.

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

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


Tob*_*les 9

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

还有其他方法可以使用rpc或ajax请求等方式访问它.


Not*_*Art 6

使用以下代码:

var value = "#{javascript:viewScope.variablename}"
Run Code Online (Sandbox Code Playgroud)


kei*_*ric 5

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

myRPC.getViewScopeVar("branchName")
Run Code Online (Sandbox Code Playgroud)

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