Korrektes Aufrufen von setGridWidth auf einem jqGrid in einem jQueryUI-Dialogfeld

Ich habe einen jQueryUI-Dialog #locDialog) mit einem jqGrid $grid) im Inneren. Wenn das Dialogfeld geöffnet wird (zunächst, aber es wird aufgerufen, wann immer es geöffnet wird), möchte ich das$grid, um die Größe des @ anzupass$locDialog. Wenn ich dies anfänglich tue, werden im Raster Bildlaufleisten angezeigt (nicht im Dialogfeld).

Wenn ich den Code debugge, sehe ich die Breite des$grid ist 677. Also, ich rufesetGridWidth() nochmal und überprüfe die Breite und jetzt habe ich 659, was 18px weniger ist, was der Größe des Bildlaufbereichs für das jqGrid entspricht (Dun-dun-dun ..)

Wenn ich den Dialog erneut öffne, ändere ich auch die Größe des Rasters und alles ist zufrieden - keine Bildlaufleisten, außer wo nötig.

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 das schon mal jemand gesehen hat. Eigentlich ist es nicht das Ende der Welt, wenn ich anfangs unnötige Bildlaufleisten habe, aber es ist nur merkwürdig, dass der Bildlaufbereich von 18px beim anfänglichen Aufruf von setGridWidth nicht berücksichtigt wird.

as die magische Zahl 54 betrifft, so musste ich diese Zahl von der Höhe des Dialogwerts subtrahieren, damit das Raster ohne unnötige Bildlaufleisten angezeigt wir

Ich denke, es könnte ein Timing-Problem sein, obwohl dies nicht sehr sinnvoll ist. Vielleicht sollte ich ein Event aufrufen, wenn das Grid vollständig geladen ist. Dies kann sicherstellen, dass die Breite korrekt berechnet wird.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage