我想覆盖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,我仍然认为我做错了。
知道在primefaces中覆盖ContentFlow javascript配置的正确方法是什么?
答案 0 :(得分:1)
ContentFlow是一个纯粹的jQuery插件,PrimeFaces就是这样处理的,没有额外的味道添加到widget, 所以你可以使用普通的jQuery来实现这一点,不需要复杂化甚至深入了解插件的事件。
例如,您可以使用onclick,如果该项目正常点击,则活动:
$(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
答案 1 :(得分:0)
通过使用AddOn,我发现从我之前使用的第一种方式中获得了更好,更清晰的方式并保证了方式和更清晰:
if (typeof ContentFlowGlobal != 'undefined') {
new ContentFlowAddOn('ImageSelectAddOn', {
ContentFlowConf : {
// onclickInactiveItem: function (item) {
// this.conf.onclickActiveItem(item);
// },
onclickActiveItem : function(item) {
var content = item.content;
var i = item.index;
// console.log("index : "+item.index);
imageId = i + 1;
// console.log("select called image id : " + imageId);
ma([ {
name : 'id',
value : imageId
} ]);
},
onReachTarget : function(item) {
this.conf.onclickActiveItem(item);
}
}
});
ContentFlowGlobal.setAddOnConf("ImageSelectAddOn");
}
可以在以下链接中找到ContentFlow的完整文档:http://www.jacksasylum.eu/ContentFlow/docu.php,您可以进行大量自定义。
P.S。:ma()
是name
的{{1}}所以我可以将变量传递给backbean。
我的问题就这样解决了,我对这种方式表示满意,希望以后能分享一些对别人有用的东西。