Korrekt aufrufen setGridWidth auf ein jqGrid innerhalb einer jQueryUI Dialog
Habe ich ein jQueryUI dialog ( #locDialog
), die eine jqGrid ($grid
) drin. Wenn das Dialogfeld geöffnet wird (zunächst, aber es wird immer aufgerufen, wenn es öffnet), ich will die $grid
Größe ändern, um die Größe der $locDialog
. Wenn ich dies tun zunächst, ich bekomme Scrollbalken innerhalb des Gitters (nicht im inneren dialog).
Wenn ich Debuggen Sie den code, sehe ich die Breite der $grid
ist 677. Also, ich nenne setGridWidth()
wieder und überprüfen Sie die Breite und jetzt habe ich 659, was 18px weniger, was die Größe des scroll-Bereichs für das jqGrid (Dun-dun-dun..)
Wenn ich rezie den dialog, ich die Größe des Rasters, und alles freut sich - keine Scrollbalken, sofern notwendig.
Mein dialog init-code:
$locDialog = $('#location-dialog').dialog({
autoOpen: false,
modal: true,
position: ['center', 100],
width: 700,
height:500,
resizable: true,
buttons: {
"Show Selected": function() {alert($('#grid').jqGrid('getGridParam','selarrrow'));},
"OK": function() {$(this).dialog('close');},
"Cancel": function() {$(this).dialog('close');}
},
open: function(event, ui) {
$grid.setGridHeight($(this).height()-54);
//No idea why 54 is the magic number here
$grid.setGridWidth($(this).width(), true);
},
close: function(event, ui) {
},
resizeStop: function(event, ui) {
$grid.setGridWidth($locDialog.width(), true);
$grid.setGridHeight($locDialog.height()-54);
}
});
Ich bin gespannt, ob jemand das schon mal gesehen. Es ist wirklich nicht das Ende der Welt, wenn ich anfangs unnötige Bildlaufleisten auf den ersten, aber es ist nur merkwürdig, dass wenn ich Anrufe, setGridWidth zunächst nicht berücksichtigt ist der scroll-Bereich von 18px.
Soweit die Magische Zahl, 54, das ist die Nummer, die ich hatte, um zu subtrahieren aus der Höhe des dialog-Wert, um die Gitter zu Rendern, ohne unnötige Scrollbalken.
Ich denke, es kann ein timing-Problem, obwohl dies nicht viel Sinn machen. Vielleicht sollte ich nenne ein Ereignis, sobald das Gitter vollständig geladen ist. Dies kann gewährleisten, berechnet die Breite korrekt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es einige Fälle, wo jqGrid berechnen Sie die Breite ein wenig falsch. Meist habe ich Probleme mit der Breite des Rasters, aber in einigen Fällen auf IE6 auch mit der Höhe. Also ich hab schreiben Sie eine kleine Funktion, um das problem zu beheben.
In diesem code
"main"
ist die id des parent-div, in dem das raster erzeugt werden. In dem code, den ich testen (scrollWidth > mainWidth
), ob die Breite der"main"
ermöglichen die Erhöhung von jqGrid Breite.Richtige Ort, um diese Funktion aufrufen, ist im inneren des
loadComplete
:in
"done"
, wenn Sie'columnChooser'
wenn verwendenQuery('#list').jqGrid('columnChooser');
(in diesem Beispiel verwende ich auch
'gridResize'
.)fixGridWidth
Funktion und ja, es ändert sich die Größe de Gitter. Aber die Spalten bleiben mit der gleichen Größe, so gibt es die Hälfte des Rasters leer, Spalten " Größe nicht ändern. Wissen Sie, wie man die Größe von Spalten zu?fixGridSize(gr);
aufwindow.onresize
Veranstaltung, die Breite wird immer automatisch ermittelt werden, aber gut dass Höhe wird immer reduziert, wenn ich Zoom Out (d.h. aufCTRL -
).var height = 800;//grid.height();