我正在尝试根据这样的条件隐藏/显示面板
<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);
...
});
有没有其他人注意到这种行为?我认为隐藏面板也会隐藏该面板内的所有底层元素。