Javascript 有条件地对XPage执行部分刷新

Javascript 有条件地对XPage执行部分刷新,javascript,xpages,partial-page-refresh,Javascript,Xpages,Partial Page Refresh,我有一个应用程序,它运行一个计时器脚本,在超时时单击一个动作按钮。操作按钮被“显示:无”隐藏。在操作按钮上,我从onClick事件对panelButtonBar进行部分刷新。除了onClick事件根据文档的条件设置viewScope变量之外,这一切都非常有效。viewScope变量为vsIsLocked,可以为true或false。如果该值为true,我不希望panelButtonBar刷新。我创建了一个名为dummyField的字段,它不执行任何操作,并在部分刷新的定义中添加了以下内容: (v

我有一个应用程序,它运行一个计时器脚本,在超时时单击一个动作按钮。操作按钮被“显示:无”隐藏。在操作按钮上,我从onClick事件对panelButtonBar进行部分刷新。除了onClick事件根据文档的条件设置viewScope变量之外,这一切都非常有效。viewScope变量为vsIsLocked,可以为true或false。如果该值为true,我不希望panelButtonBar刷新。我创建了一个名为dummyField的字段,它不执行任何操作,并在部分刷新的定义中添加了以下内容:

(viewScope.get("vsIsLocked")) ? "dummyField" : "panelButtonBar"
通过将dBar.info语句放在代码中(通过单击操作按钮),我知道它正在按计划运行,我还知道vsIsLocked的值已从true更改为false,但panelButtonBar不会刷新。正如我所说的,如果我取出条件语句,只对panelbutton进行部分刷新,那么在刷新正常的情况下,条件部分刷新就不起作用了。我相信我的回答是正确的。我试过:

(viewScope.get("vsIsLocked")) ? "" : "panelButtonBar"

但是,部分刷新似乎是作为总刷新运行的。

您可能会有点被“什么时候刷新”所困扰。
(viewScope.get(“vsIsLocked”)?“dummyField”:“panelButtonBar”
位于隐藏按钮中,当该按钮刷新时计算。但是,当您“按下”按钮时,您可以刷新dummyField或panelButtonBar,但不能刷新按钮本身。所以你的情况没有得到评估

您可以尝试将隐藏按钮放入panelButtonBar,或将刷新目标设置为同时包含这两个按钮的内容

更新

目标属性仅在页面加载时计算,因此需要为刷新目标各设置一个按钮,并计算呈现属性。因此,每次刷新时,都会向浏览器发送不同的按钮。您可以为目标使用带有参数数组的自定义控件,因此您的UI中只有一个控件

您可以使用JSFIDLE进一步说明这一点吗?从一个比尔F.到另一个比尔F.的问候。对另一个人-不知道你的意思。每件事都会对代码进行条件刷新。在“选择要刷新的元素”对话框中,我选择了secfiy元素ID,然后不再输入panelButtonBar,而是选择小菱形并输入上面的js。很简单,vsIsLocked要么为真,要么为假,如果为真,刷新dummyField,如果为假,刷新panelButtonBar实际上什么都不做(只是一个占位符)。我可以让它一直在panelButtonBar上进行部分刷新,但如果是真的,就没有理由这样做。他指的是哪种方法是测试和共享纯客户端web代码的好方法。由于这个特定的问题是服务器端行为,这在本例中不适用,但它是一个很好的工具,需要注意.P.s。由于事件处理程序也是组件,因此它们支持
rendered
属性。如果您通过CSS隐藏的按钮位于部分刷新目标内,并且您计算了其事件处理程序的
rendered
属性,当您以编程方式“单击”按钮时,如果
rendered
的计算结果为false,则不会发生任何事情,因为单击事件尚未注册。@Tim本例中的所有组件都使用display:none“隐藏”,而不是“rendered”属性。如果我将“panelButtonBar”显式地放在partialrefresh属性中,那么一切都会按预期工作,除了我完成了一大堆不必要的部分refresh之外。似乎围绕着部分刷新的公式旋转。onClick事件将vsIsLocked设置为正确,但部分刷新公式似乎没有启动,至少没有正确启动。按钮被渲染,但被display隐藏:none。我不认为没有“渲染”是隐藏的,我认为它不存在,如果我想“隐藏”的东西从用户,我使用“显示:没有”,我不相信“渲染”应该永远等同于隐藏。等式的另一部分是,如果我在部分刷新中明确地添加“panelButtonBar”,它就会这样做。我试图阻止的问题是一系列部分刷新。即使我在部分刷新中有公式,“单击”事件也会按计划触发,因此我相信问题完全围绕着部分刷新公式的问题。我设置了一个测试场景,当用户打开文档时,vsIsLocked为true(即文档被锁定),然后我释放了文档上的锁。下次运行的单击事件vsIsLocked为false,但部分刷新没有刷新panelButtonBar。请从部分刷新中删除公式并将其替换为“panelButtonBar”,重复上述过程。完全按照我的要求工作,但每“n”秒进行不必要的部分刷新。只是想去掉不必要的开销。实际上,如果我没记错的话,按钮在“panelButtonBar”中。刷新目标只在页面加载时计算,所以你不能动态切换它们。所以你可能想沿着蒂姆建议的方法走下去