我们的代码生成了几个<div>
框(带有自定义标签own:resourceDiagramElement
)。现在我们尝试为每个<div>
框绑定一个具有以下两种行为的覆盖面板:
如果鼠标在
<div>
框/元素上移动,则 OverlayPanel 应显示有关框/元素的一些详细信息<div>
。如果鼠标移出<div>
框外,则应隐藏 OverlayPanel。如果您单击一个
<div>
框/元素,则应显示 OverplayPanel 并保持打开状态,直到您再次单击该<div>
框/元素。就像您单击了<div>
框一样,如果鼠标移出<div>
框范围,则不会发生任何事情。
基本上源代码看起来是这样的:
<c:forEach items="#{resourceStateDiagramViewBean.graphicalResources}" var="resource1">
<own:resourceStateDiagramElement id="#{resource1.id}"
onClick="alert('alert')" top="#{resource1.top}"
left="#{resource1.left}" width="#{resource1.width}"
height="#{resource1.height}" styleClass="#{resource1.styleClass}"
showText="#{resourceStateDiagramViewBean.showText}" />
...
<p:overlayPanel id="panel_#{resource1.id}" for="#{resource1.id}"
showEvent="mouseover OR mouseclick" hideEvent="mouseleave OR mouseclick" >
...
</c:forEach>
我们的自定义标签<own:resourceStateDiagramElement>
生成 html 代码,例如:
<div id="facility_01" class="resource-element-default" style="top:1%;
left:2%; width:5%; height:2%;">
这意味着这hideEvent
应该取决于面板显示的方式/事件......我们尝试绑定和取消绑定<div>
元素上的事件,但看起来 primesfaces 事件覆盖了这个自己的绑定。
我们怎样才能做到这一点?