我想覆盖onclickActiveItem
函数,并且需要检索当前活动项目索引或在Primefaces中使用onMakeActive
调用某些内容,最佳方法是什么?
我可以通过以下方式调用函数:
<p:contentFlow value="#{imagesView.images}" var="image" widgetVar="img">
<p:graphicImage value="/images/imgs/img#{image}.jpg" styleClass="content" onclick="select(#{image})" />
</p:contentFlow>
然后在javascript中:
function setImageIndex(i){
return;
}
function select(i) {
ContentFlowGlobal.Flows[0].setConfig({onclickActiveItem:setImageIndex});
}
但是如果我这样尝试:
ContentFlowGlobal.Flows[0].setConfig({onclickActiveItem:setImageIndex(i)});
它可以工作,但是有许多控制台错误记录,例如“ onclickActiveItem不是函数”!
因此,通过这种方式,我删除了打开图像本身的默认操作,并且可以使用onclick进行调用,我希望有更好的方法来覆盖ContentFlow js,但我仍然认为我做错了。
任何想法有什么正确的方法来覆盖Primeface中的ContentFlow javascript配置吗?
最佳答案
ContentFlow是一个纯jQuery插件,PrimeFaces将其视为这样,没有为widget添加任何额外的样式,
因此,您可以使用普通的jQuery实现此目的,而无需使事情复杂化,甚至无需深入研究插件的事件。
例如,您可以使用onclick,如果该项目通常为click,则它是活动的:
$(document).on('click', '.flow .item', function(){
var imageIndex = $(this).index();// the image index
$(this).find('canvas').attr('src');// the image src
// then you could call a remoteCommand from here passing the index
})
编辑:如果已选择要防止打开图像,可以采用此方法...
<p:contentFlow value="#{mainBean.batImages}" var="image">
<p:graphicImage name="images/list/#{image}" styleClass="content" onclick="clickFlow(this, event)" />
</p:contentFlow>
现在,JavaScript非常简单:
function clickFlow(item ,e) {
//prevents image opening...
if ($(item).parent().hasClass('active')) {
e.stopImmediatePropagation();
}
}
基本上,您检查用户是否单击了活动图像,如果是,则调用stopImmediatePropagation(),它使其余处理程序无法执行,并防止事件使DOM树冒泡。
这是working demo