0

我正在尝试根据这样的条件隐藏/显示面板

<xp:panel id="panelUsersInput">
 <!--<xp:this.rendered><![CDATA[#{javascript:return ((getComponent("optAttendees").getAttributes().get("value")=="defined"));}]]></xp:this.rendered>-->
 <xp:inputText id="namUsersInput">
  <xp:typeAhead mode="partial" minChars="3" ignoreCase="true" var="lupUsersInput">
   <xp:this.valueList><![CDATA[#{javascript:@DbLookup( [ database.getServer(), 'names.nsf' ], '($VIMPeople)', lupUsersInput, 1, '[PARTIALMATCH]' );}]]></xp:this.valueList>
  </xp:typeAhead>
 </xp:inputText>
 <xp:button value="" id="btnAddUser" styleClass="button add clear" title="add attendant">
  <xp:span/>
  <xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="panelUsersList" execMode="partial" execId="panelSelectionAttendees">
   <xp:this.onStart><![CDATA[(dojo.byId("#{id:namUsersInput}").value!="");]]></xp:this.onStart>
   <xp:this.action>
    <![CDATA[#{javascript:
     var lstUsers = getComponent("namUsers").getAttributes().get("value");
     if(typeof(lstUsers)==typeof(java.util.Vector)) {
      lstUsers.push(getComponent("namUsersInput").getAttributes().get("value"));
      lstUsers.sort();
     } else {
      lstUsers = @Trim(@List(lstUsers, getComponent("namUsersInput").getAttributes().get("value")));
     }

     getComponent("namUsersInput").getAttributes().put("value", "");
     getComponent("namUsers").getAttributes().put("value", lstUsers);
    }]]>
   </xp:this.action>
   <xp:this.onComplete><![CDATA[if(dojo.byId("#{id:rpUsersSelection}")) { highlightSection("#{id:rpUsersSelection}"); }]]></xp:this.onComplete>
  </xp:eventHandler>
 </xp:button>
 <div class="clearAll"/>
</xp:panel>

如您所见,我已禁用面板的渲染选项。使用此设置,此面板内的按钮将按指示工作。

当为面板启用渲染选项时,该面板内的按钮正在做某事,但部分刷新返回的结果就像重新加载指定的部分(带有部分id)。

更有趣的是这个事实:当面板渲染条件为假时,按钮触发的事件仍然被渲染。但是事件处理程序找不到要绑定的父元素。结果是将此事件全局绑定到整个页面(body-element)。

XSP.addOnLoad(function() {
...
XSP.attachPartial("view:_id1:_id11:_id47", "view:_id1:_id11:btnAddUser", "view:_id1:_id11:panelSelectionAttendees", "onclick", view__id1__id11__id47_clientSide_onclick, 2, "view:_id1:_id11:panelUsersList", null, "if(dojo.byId(\"view:_id1:_id11:namUsers\").value!=\"\") { dojo.byId(\"view:_id1:_id11:namUsersInput\").value=\"\"; highlightSection(\"view:_id1:_id11:panelUsersList\"); }", null);
...
});

有没有其他人注意到这种行为?我认为隐藏面板也会隐藏该面板内的所有底层元素。

4

1 回答 1

0

似乎是一个已知的错误

LO73179:XPAGES 事件处理程序渲染与父组件的渲染不匹配

http://www-01.ibm.com/support/docview.wss?uid=swg1LO73179

于 2013-02-19T10:42:22.917 回答