在我的XPage上,我定义了一个BS手风琴:
<div class="panel-collapse collapse in" id="collapseOne" aria-expanded="true" style="">
</div>
在按钮上,我想保存面板的状态,因此在完全刷新后,我想以其先前状态显示手风琴面板。
所以我的按钮现在看起来如下:
<xp:button
value="Label"
id="button1">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="complete">
<xp:this.script><![CDATA[if ($('#collapseOne').attr('aria-expanded') == "false") {
"#{javascript:viewScope.put('accordian','collapsed')}";
}else{
"#{javascript:viewScope.put('accordian','expanded')}";
}]]></xp:this.script>
</xp:eventHandler>
</xp:button>
不管风琴是哪种状态,即使脚本标识了风琴的正确状态,viewScope的“ accordian”也被设置为“ expanded”。
我在做什么错?
更新:
我按照建议设置了RPC服务,但是它不起作用。我在做什么错?
<xe:jsonRpcService
id="rpcServiceSetState">
<xe:this.methods>
<xe:remoteMethod
name="setPanelState"
loaded="true"
script="viewScope.put('accordian', unid)">
<xe:this.arguments>
<xe:remoteMethodArg
name="state"
type="string">
</xe:remoteMethodArg>
</xe:this.arguments>
</xe:remoteMethod>
</xe:this.methods></xe:jsonRpcService>
<xp:button id="btnTriggerRPC" value="Trigger RPC Method">
<xp:eventHandler
event="onclick"
submit="true" refreshMode="complete">
<xp:this.script><![CDATA[if ($('#collapseOne').attr('aria-expanded') == "false") {
rpcServiceSetState.setPanelState('collapsed')
}else{
rpcServiceSetState.setPanelState('expanded')
}]]></xp:this.script>
</xp:eventHandler>
</xp:button>
在我的XPage上,我定义了BS手风琴:
[如果您使用浏览器开发人员工具并查看浏览器上的内容,将会看到问题的根源。 SSJS仅在服务器上运行,并且代码的结果被注入到CSJS函数中并传递给浏览器。 CSJS仅在浏览器上运行,而不能在服务器上运行。