0

我在 Primefaces 论坛上读到,应该避免直接更新对话框或更新环绕元素,因为实例是重复的和其他奇怪的行为。但是我们有某种特殊情况,确实需要更新包含大量对话框的元素。

如果没有重复的实例,真的没有办法以同样的方式做到这一点吗?重复的实例是怎么来的?难道这仅在appendToBody设置为 true 时发生,因为它被更新并再次转移到正文而不是仅仅被更新?

4

3 回答 3

1

一个解决方案是修复 dialog.js,请参阅Primefaces 论坛

对于 Primefaces 3.4.1:

PrimeFaces.widget.Dialog.prototype._show = function() {
    if(this.cfg.showEffect) {
        var _self = this;

        this.jq.show(this.cfg.showEffect, null, 'normal', function() {
        _self.postShow();
    });
}
else {
    //display dialog
    /*Begin Custom Code*/
    var dlg = jQuery(this.jqId);

    if(dlg.size() > 1){
        dlg.last().remove();
    }
    this.jq = dlg;
    /*End Custom Code*/
    this.jq.show();

    this.postShow();
}

this.focusFirstInput();
this.visible = true;
this.moveToTop();

if(this.cfg.modal)
this.enableModality();
}
于 2012-11-14T15:43:01.707 回答
0

The dialog was reimplemented in v3.0. I think there are no problems now.

于 2012-10-20T17:47:51.343 回答
0

对于 Primefaces 3.5

PrimeFaces.widget.Dialog.prototype._show = function() {
    this.jq.removeClass("ui-overlay-hidden").addClass("ui-overlay-visible").css({display:"none",visibility:"visible"});

    if(this.cfg.showEffect){
        var a=this;
        this.jq.show(this.cfg.showEffect,null,"normal",function(){
            a.postShow();
        });
    }
    else {
        //display dialog
        /*Begin Custom Code*/
        var dlg = jQuery(this.jqId);

        if(dlg.size() > 1){
            dlg.first().remove();
        }
        this.jq = dlg;
        /*End Custom Code*/
        this.jq.show();
        this.postShow();
    }
    this.moveToTop();
    if(this.cfg.modal){
        this.enableModality();
    }
}
于 2014-01-07T13:40:35.500 回答