如果满足特定条件,是否可以取消素数p:tree
中节点的选择事件?
我想显示一个对话框,如果用户选择“取消”选项,则不应更改选择。 我尝试从p:ajax调用javascript函数,但是无论如何都选择了新节点。
<p:ajax event="select" onstart="showDialog()"/>
我必须重写Primefaces树的默认行为吗?
PF6.2
答案 0 :(得分:2)
要取消请求,您需要在false
中显式返回一个onstart
。
onstart="return false;"
将取消该请求。这意味着您需要从showDialog AND 中返回true或false,并在onstart中显式返回该值。所以
onstart="return showDialog();"
那么,您面临的挑战是如何“延迟”此javascript函数的返回值,以便您可以提供用户操作的返回值。
答案 1 :(得分:0)
我终于想出了另一种解决方案:我已经覆盖了Primefaces VerticalTree窗口小部件的“ 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);
}
我使用了JQuery UI确认对话框。如果用户单击“继续”,我将使用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" );
}
}
});
} );
有点棘手,但似乎效果很好。