2010-09-27 6 views
1

Le code ci-dessous est appelé lorsqu'un utilisateur sélectionne Enregistrer dans une fenêtre modale contextuelle ExtJS. Cette fenêtre contient UNIQUEMENT une liste déroulante. Maintenant, parfois, quand un utilisateur enregistre cela, puis l'ouvre à nouveau plus tard, la liste déroulante apparaîtra derrière la fenêtre tout grisé, incapable d'y accéder. D'autres fois, tout ira bien et fonctionnera, et il n'y aura pas de différence dans les événements qui se produiront dans les deux cas, mais dans l'incohérence totale.La liste déroulante ExtJS se cache parfois derrière la fenêtre grisée

Est-ce que quelqu'un sait ce que cela pourrait être?

var changeProductOK = function() { 
      var win = getChangeProductWindow(); 
      if (win.subProductId.getValue() == '') { 
       Global.alert('Choose a product'); 
       return; 
      } 
      win.hide(); 
      PropertiesWin.hide(); 

      Global.confirm('You sure?', 'Confirm', function(result) { 
       if (result) { 
        Global.mask('Changing the product', workspacePanel.getEl()); 
        WorkspaceController.ChangeProduct(applicationId, win.subProductId.getValue(), function(response) { 
         Global.unmask(workspacePanel.getEl()); 

         if (!response) { 
          showWorkflowMessages([{ Type: 0, Text: 'A timeout occurred while changing the product. Please try again.'}]); 
          return; 
         } 
         if (response.Data.Result == false) { 
          showWorkflowMessages(response.Data.Messages); 
         } else { 
          Global.mask('Reloading the application'); 
          reloadWorkspace(); 
         } 
        }); 
       } 
       win.subProductId.setValue(''); 
      }); 
     } 

Répondre

0

Je réponds à la façon dont je me déplace, mais ne hésitez pas à poster d'autres réponses avant qu'il me permet d'accepter celui-ci si vous connaissez un moyen commun pour éviter que cela se produise.

J'ai placé

win.close(); 

juste après

win.subProductId.setValue(''); 

De cette façon, il détruit le modal chaque fois qu'un enregistrement réussi complète et donc il sera toujours charger que la fenêtre initiale (qui a travaillé à chaque fois)

1

Le problème a à voir avec une sorte de bug impliquant les index z. Je viens de le fixe en faisant que le z-index était un peu plus élevé que la fenêtre en ajoutant:

<style> 
    .x-combo-list {z-index: 10000 !important} /* A hack to fix superboxselect dropdowns showing up behind window */ 
</style> 

Pas beau, mais il fonctionne.