条件渲染元素(即面板)中的按钮(更好的事件处理程序)具有不可预测的结果

时间:2013-02-19 09:40:50

标签: event-handling xpages renderer

我试图隐藏/显示基于这样的条件的面板

<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);
...
});

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

1 个答案:

答案 0 :(得分:0)

似乎是一个已知的错误

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

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