Correctement appelant setGridWidth sur un jqGrid à l'intérieur d'un Dialogue jQueryUI

J'ai un jQueryUI dialogue (#locDialog) qui a un jqGrid ($grid) à l'intérieur. Lorsque la boîte de Dialogue s'ouvre (à l'origine, mais elle est appelée à chaque fois qu'il ouvre), je veux le $grid pour redimensionner à la taille de la $locDialog. Quand je fais cela au départ, je reçois des barres de défilement à l'intérieur de la grille (pas à l'intérieur de la boîte de dialogue).

Si je déboguer le code, je vois la largeur de la $grid est de 677. Donc, j'appelle setGridWidth() de nouveau et vérifier la largeur et maintenant, j'ai 659, qui est 18px moins, ce qui est la taille de la zone de défilement pour le jqGrid (Dun-dun-dun,..)

Quand je rezie la boîte de dialogue, j'ai redimensionner la grille, et tout est heureux - pas de barres de défilement, sauf si cela est nécessaire.

Mon boîte de dialogue code d'initialisation:

$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);
    }
});

Je suis curieux de savoir si quelqu'un a vu ça avant. Vraiment, elle n'est pas la fin du monde si j'ai d'abord avoir les barres de défilement inutile au premier abord, mais c'est juste bizarre que quand je l'appelle setGridWidth d'abord, elle ne prend pas en compte la zone de défilement de 18px.

Autant que le nombre magique 54, qui est le nombre que j'avais à soustraire de la hauteur de la boîte de dialogue valeur pour obtenir la grille de rendre inutile sans les barres de défilement.


Je pense que c'est peut être un problème de timing, même si cela n'a pas beaucoup de sens. Peut-être que je devrais appeler un événement une fois que la grille est complètement chargé. Cela peut s'assurer qu'il calcule sa largeur correctement.

OriginalL'auteur Dan | 2010-04-21