【问题标题】:Trying the Partial Refresh Optimizes by Sven Hasselbach尝试 Sven Hasselbach 的部分刷新优化
【发布时间】:2014-11-14 15:30:27
【问题描述】:

我用这段代码设置了一个非常简单的小测试页面:

<xp:panel id="panelAll">
        <xp:panel rendered="#{javascript:(viewScope.vsPanelRed) ? true : false;}" style="background-color:rgb(255,0,0)">
            Panel Red
        </xp:panel>
        <xp:panel
            rendered="#{javascript:(viewScope.vsPanelRed) ? false : true;}"
            style="background-color:rgb(0,255,0)">
            Panel Green
        </xp:panel>
    </xp:panel>
    <xp:br></xp:br>

    <xp:panel id="panelMain">
        <xp:button value="Label" id="button1">
            <xp:eventHandler event="onclick" submit="false">
                <xp:this.script>
                    <![CDATA[XSP.partialRefreshPost('#{id:panelAll}',{clearForm: true});]]>
                </xp:this.script>
                <xp:this.action><![CDATA[#{javascript:println( "in Click Button");
if (viewScope.vsPanelRed == true){
    viewScope.vsPanelRed = false;
}else{
    viewScope.vsPanelRed = true;
}
            }]]>
                </xp:this.action>
            </xp:eventHandler>
        </xp:button>

    </xp:panel><!-- panelMain -->

该操作将 viewScope vsPanelRed 从 true 切换为 false,并显示红色面板或绿色面板。如果我在 eventHandler 上使用传统的 refreshMode="partial" refreshId="panelAll" 进行 onclick 面板切换,如果我使用 partialResheshPost 作为博客所说的(我认为我输入正确,部分刷新实际上不会发生切换 vsPanelRed 的操作也不会发生。所以我一定在 ![CDATA] 中有问题,但我不知道为什么。

我错过了什么?

【问题讨论】:

    标签: xpages xpages-ssjs


    【解决方案1】:

    Sven Hasselbach 在其优化的部分刷新中不包含对事件处理程序的支持。我已经扩展了他的解决方案以包括对此的支持 - 请参阅我的博客文章 "XPages: Optimized partial refreshes for event handlers"

    如果您将我的优化版本作为 xp:scriptBlock 包含在您的 XPage 中,那么您需要将您的按钮更改为:

    <xp:button value="Label" id="button1">
        <xp:eventHandler id="submitEventHandler" event="onclick" submit="false">
            <xp:this.script>
                <![CDATA[
                    XSP.partialRefreshPost(
                        '#{id:panelAll}',
                        {clearForm: true, submitid: '#{id:submitEventHandler}'}
                    );
                ]]>
            </xp:this.script>
            <xp:this.action><![CDATA[#{javascript:
                println( "in Click Button");
                if (viewScope.vsPanelRed == true){
                    viewScope.vsPanelRed = false;
                }else{
                    viewScope.vsPanelRed = true;
                }
            }]]></xp:this.action>
        </xp:eventHandler>
    </xp:button>
    

    【讨论】:

    • 你不能使用 viewScope.vsPanelRed = viewScope.vsPanelRed == true 来缩短 viewScope.vsPanelRed 的分配时间吗?假:真; (是的 viewScope.vsPanelRed = viewScope.vsPanelRed ?假:真;应该也可以)
    • 当然,克里斯蒂安。我只是从比尔那里复制了逻辑。关键是如何使优化的部分刷新与服务器端操作一起工作:-)
    • @PerHenrikLausten 就像一个魅力,现在在我的页面上进行了相当多的编辑以使其工作。我有一个非常复杂的页面,在不同的地方有超过 30 次部分刷新。
    • @ChristianGüdemann 我的示例只是在测试页面上让它工作。除了部分刷新之外,这不是优化任何东西的尝试。你的建议是正确的,但我当时只是在看一个方向。
    • 这是对 Sven 代码的一个非常有用的扩展。酷。
    猜你喜欢
    • 1970-01-01
    • 2020-09-11
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多