Primefaces 处理拾取列表的重新排序

Primefaces 处理拾取列表的重新排序,primefaces,Primefaces,根据Primefaces 5.0中有关拾取列表组件的文档: PickList将传输作为默认值提供,并且只有当项目被激活时才会触发ajax行为事件 从一个列表移动到另一个列表。下面的示例演示如何使用此事件 但是,如果用户使用重新排序按钮(使用showTargetControls标志显示)更改了传输项目的顺序,则我的用例要求我跟踪更改 我有哪些选项可以跟踪目标列表中元素的顺序 2015年1月编辑:SJuan76评论指出:根据PF版本5.1.9,API中添加了3个新事件:重新排序、选择、取消选择。来源

根据Primefaces 5.0中有关拾取列表组件的文档:

PickList将传输作为默认值提供,并且只有当项目被激活时才会触发ajax行为事件 从一个列表移动到另一个列表。下面的示例演示如何使用此事件

但是,如果用户使用重新排序按钮(使用
showTargetControls
标志显示)更改了传输项目的顺序,则我的用例要求我跟踪更改

我有哪些选项可以跟踪目标列表中元素的顺序


2015年1月编辑:SJuan76评论指出:根据PF版本5.1.9,API中添加了3个新事件:重新排序、选择、取消选择。来源:

由于primefaces不提供触发这些事件的接口,因此您必须提供自己的钩子

因为这是一个常见的问题,下面是你如何做到这一点

在这种情况下,我将重写saveState函数,以便在任何picklist修改(传输或排序)后触发您自己的事件。为此,请使用以下脚本使用jquery extend覆盖primefaces javascript,最终修改提供的primefaces代码:

<script>
  (function($) {
    $.extend(PrimeFaces.widget.PickList.prototype, {
        _old_saveState : PrimeFaces.widget.PickList.prototype.saveState,
        saveState : function() {
            this._old_saveState();
            // TODO: call custom functionality here, such as calling a p:remoteCommmand
        }
    });
  })(jQuery);
</script>

(函数($){
$.extend(PrimeFaces.widget.PickList.prototype{
_旧的保存状态:PrimeFaces.widget.PickList.prototype.saveState,
saveState:function(){
这个._old_saveState();
//TODO:在此处调用自定义功能,例如调用p:remoteCommmand
}
});
})(jQuery);

最重要的是,您必须深入了解primefaces javascript以了解真正的情况。在不同版本的primefaces之间升级后,请小心重新测试。

这非常有效,谢谢!对于任何使用此技术的人,请确保脚本片段只被调用一次(注意jsf页面更新!),否则控制台中会出现“未捕获的RangeError:超过最大调用堆栈大小”javascript错误,钩子将无法工作;希望它能在5.2.0社区版中提供。