CSJS XSP.partialRefreshGet似乎没有进行刷新

Bil*_*l F 1 javascript client-side xpages

我在“左列”的应用程序布局上有​​一个xe:navigator(称为navigator1)。在右列中,我有一个dynamicContent控件。在导航器的onClick事件中,我对navigator1进行了部分刷新,该刷新可以工作,但dynamicContent1没有刷新。我可以进行完全刷新,并且两者都可以刷新,但是会降低性能。我将其放在onClick的客户端:

XSP.partialRefreshGet('#{id:dynamicContent1}');
return true
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,dynamicContent1不会刷新。我认为我的语法正确。如果在服务器端我对dynamicContent1进行了部分刷新,则它会正确刷新它,但不会刷新navigator1。因此,问题是可以对同一个onClick事件进行两次局部刷新吗?

Tim*_*ony 5

如果我正确地阅读了您的问题,那么这只是一个时序问题:当您在同一事件中定义客户端代码和服务器代码时,总是首先执行客户端代码。因此,它会执行事件之前刷新您的dynamicContent控件。navigator

将CSJS代码移动到的onComplete属性eventHandler。该属性未显示在事件的“漂亮面板”中,因此您需要直接导航到<xp:eventHandler />标签(在Source XML中或通过Outline),然后onComplete在All Properties下找到列出的属性。

放置刷新代码onComplete将确保在第一次刷新完成之后进行第二次刷新,这将使第二个目标反映事件触发的任何更改。

温馨提示:您还可以进行连锁刷新:

XSP.partialRefreshGet("#{id:div1}", {
    onComplete: function() {
        XSP.partialRefreshGet("#{id:div2}", {
            onComplete: function() {
                XSP.partialRefreshGet("#{id:div3}", {
                    onComplete: function() {
                        XSP.partialRefreshGet("#{id:div4}");
                    }
                });
            }
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

这使您可以刷新所需的任意数量的目标,但适用相同的规则:如果您需要任何目标“感知”事件中进行的数据或组件更改,则需要触发该事件的开始。该onComplete事件属性中的链,而不是该事件本身的客户端代码。