我在Primefaces論壇上讀到,應該避免直接更新對話框或更新環繞元素,因爲這些實例是重複的以及其他奇怪的行爲。 但我們有一些特殊情況,並且確實需要更新包含大量對話框的元素。Primefaces中的對話框更新
是否真的沒有辦法以同樣的方式做到這一點,而沒有得到重複的實例?它是如何來到重複的實例?難道這隻會發生在appendToBody
被設置爲true時,因爲它被更新並且再次移動到身體而不是被更新?
我在Primefaces論壇上讀到,應該避免直接更新對話框或更新環繞元素,因爲這些實例是重複的以及其他奇怪的行爲。 但我們有一些特殊情況,並且確實需要更新包含大量對話框的元素。Primefaces中的對話框更新
是否真的沒有辦法以同樣的方式做到這一點,而沒有得到重複的實例?它是如何來到重複的實例?難道這隻會發生在appendToBody
被設置爲true時,因爲它被更新並且再次移動到身體而不是被更新?
該對話框在v3.0中被重新實現。我認爲現在沒有問題。
解決的辦法是修復dialog.js,請參閱Primefaces forum。
對於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();
}
對於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();
}
}
對於Primefaces 2.2.1,你可以在dialog.js添加以下行(在第28行): 這.jq.removeAttr('id')。parent()。attr('id',this.id); 請參閱http://code.google.com/p/primefaces/issues/detail?id=1971 – cirmp