javascript - 尝试从 CSJS 在 vi​​ewscope 中设置 BS Accordion 的状态,但值始终相同(且不正确)

标签 javascript twitter-bootstrap xpages

在我的 XPage 上,我定义了 BS Accordion :

<div class="panel-collapse collapse in" id="collapseOne" aria-expanded="true" style="">
</div>

在按钮上,我想保存面板的状态,因此在完全刷新后,我想以之前的状态显示 Accordion 面板。

所以我的按钮现在看起来如下:

<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>

无论 Accordion 处于什么状态,即使脚本识别了 Accordion 的正确状态,viewScope“ Accordion ”也会设置为“展开”。

我做错了什么?

更新:

我按照建议设置了 RPC 服务,但它不起作用。我做错了什么?

<xe:jsonRpcService
                                id="rpcServiceSetState">
                            <xe:this.methods>
                                <xe:remoteMethod
                                    name="setPanelState"
                                    loaded="true"
                                    script="viewScope.put('accordian', state)">
                                    <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>

最佳答案

下面的代码允许我通过 RPC 服务设置 View 范围?

<xe:jsonRpcService id="jsonRpcServiceSelected"
        serviceName="rpcService" rendered="true">
        <xe:this.methods>
            <xe:remoteMethod name="setAccordion"
                script="viewScope.put('accordion', selected);">
                <xe:this.arguments>
                    <xe:remoteMethodArg name="selected" type="string" />
                </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") {
rpcService.setAccordion('collapsed');

}else{

    rpcService.setAccordion('expanded');
}]]></xp:this.script>
        </xp:eventHandler>
</xp:button>

关于javascript - 尝试从 CSJS 在 vi​​ewscope 中设置 BS Accordion 的状态,但值始终相同(且不正确),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59211467/

相关文章:

java - 使用 JSON.org 解析器从 HttpClient 请求中解析 JSON

xpages - NamePicker 控件可以搜索姓氏和名字吗?

java - 使用 OpenNTF POI 从 Excel 获取值,但 row.getCellType() 不再起作用

javascript - 如何使用 JavaScript 以动画方式绘制跟随移动元素的线条

javascript - 将值/文本设置为下拉列表

javascript - 维护范围

javascript - 如何访问 "object Window"中的 javascript 函数

html - Bootstrap 导航栏对齐正确的问题没有崩溃

javascript - Bootstrap 更改移动导航栏高度

html - Bootstrap 3.3.6 导航栏 float 到中心