代码之家  ›  专栏  ›  技术社区  ›  Neo

p:树:取消选择事件

  •  2
  • Neo  · 技术社区  · 6 年前

    有没有办法取消primefaces中节点的select事件 p:tree 如果某个条件是真的?

    我想显示一个对话框,如果用户选择选项“取消”的选择不应该被改变。

    <p:ajax event="select" onstart="showDialog()"/>
    

    我必须重写Primefaces树的默认行为?


    流程图6.2

    2 回复  |  直到 6 年前
        1
  •  2
  •   Kukeltje    6 年前

    false onstart 如果你想取消请求。

    onstart="return false;"
    

    将取消请求。这意味着您需要从showDialog返回true或false 以及

    onstart="return showDialog();"
    

    接下来的挑战是如何“延迟”这个javascript函数的返回,以便提供用户操作的返回值。

        2
  •  0
  •   Neo    6 年前

    我终于想出了另一个解决方案:我已经覆盖了PrimeFacesVerticalTree小部件的“nodeClick”,这样我就可以选择显示对话框或继续选择。

    举个例子:

    var param0, param1,param2;
    
    function init() {
        PF('treeWidgetVar').nodeClick = function (b, a) {
            param0 = this;
            param1 = b;
            param2 = a;
    
            if(checkSomeCondition() == 'true'){
                showMyDialog();
                return;
            }else {
                PrimeFaces.widget.VerticalTree.prototype.nodeClick.call(this, b, a);
            }
        };
    }
    
    function doSelection(){
        PrimeFaces.widget.VerticalTree.prototype.nodeClick.call(param0, param1, param2);
    }
    

    我使用了jqueryui确认对话框。如果用户单击“继续”,我将使用savad参数进行选择,否则我将关闭对话框。

        $( function() {
            $( "#dialog-confirm" ).dialog({
                autoOpen: false,
                resizable: false,
                height: "auto",
                width: 400,
                modal: true,
                buttons: {
                    "Continue": function() {
                        $( this ).dialog( "close" );
                        doSelection();
                    },
                    Cancel: function() {
                        $( this ).dialog( "close" );
                    }
                }
            });
        } );