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.

InformationsquelleAutor Dan | 2010-04-21
Schreibe einen Kommentar