2009-09-01 2 views
0

Dans ma page default.aspx, j'ai des outils ESRI (et quelques commandes) dans une barre d'outils, donc quelque chose comme ça. Maintenant, j'ai du code qui est utilisé pour désactiver l'outil, en changeant efficacement son image. Le code bascule sur la barre d'outils pour trouver l'outil qui doit être désactivé et son action. Après que le code s'exécute, tout fonctionne à merveille. L'outil approprié a été désactivé et l'image a été modifiée en conséquence.Pourquoi mes articles ESRI: Tool sont-ils réinitialisés lorsque je sélectionne un autre outil sur la page?

Le problème est que, si je sélectionne, disons, l'outil d'agrandissement, l'image pour l'outil que je viens d'invalider revient immédiatement à l'image par défaut.

Il semble qu'il doit y avoir un bloc de Javascript en cours d'exécution quelque part qui réinitialise l'état de tous les outils à leurs valeurs par défaut, comme défini dans la page Default.aspx. J'ai du mal à le trouver. Des idées?

EDIT: Le code pour désactiver le bouton est le code C# qui est quelque chose comme ...

foreach (InteractiveImageToolbarItem toolbarTool in toolbar.ToolbarItems) 
{ 
    // First check to see if the dictionary even contains the tool, if not we assume the tool is enabled for all themes, so enable it and 
    // move to the next iteration. 
    if (!enabledTools.Keys.Contains(toolbarTool.Name)) 
    { 
     toolbarTool.Disabled = false; 
     continue; 
    } 

    // So the tool is in the list, this loop checks to see if the tool is enabled for the current theme, meaning the theme is in the list 
    // associated with the tool. 
    foreach (string themeFromConfig in enabledTools[toolbarTool.Name]) 
    { 
     if (currentTheme != themeFromConfig) 
     { 
      toolbarTool.Disabled = true; 
     } 
     else 
     { 
      toolbarTool.Disabled = false; 
      break; 
     } 
    } 
} 

On peut voir ce qui doit être activé en regardant les valeurs de configuration. Encore une fois, je vais mentionner, cette partie fonctionne bien.

Mise à jour le 03/09/09: Ok, donc je pense que je connais le problème. Dans le Web ADF la méthode qui est appelée, ToolbarMouseDown, a un appel à la fin de celui-ci ...

Toolbars[toolbarName].refreshGroup(); 

Si un outil est cliqué dans une barre d'outils qui fait partie du même groupe que ma barre d'outils, la l'image sera réinitialisée. Je ne suis pas sûr d'avoir la logique derrière cela, il est impossible de désactiver les outils ou de changer les images et de les faire persister. Quoi qu'il en soit ...

Quoi qu'il en soit, tout cela est du côté Javascript, y a-t-il un moyen de savoir quand cet appel à refreshGroup a été fait ou quelque chose comme ça? Ce que je pense qu'il doit se passer, c'est lorsque l'image est réinitialisée à être activé, je dois immédiatement le remettre à être désactivé.

+0

Re: "J'ai du code". Voulez-vous dire le code JavaScript ou le code C# qui désactive le bouton? –

+0

Code C#, détails affichés ci-dessus. – Carter

Répondre

0

Lorsque les contrôles WebADF sont rendus sur la page, ils font référence aux bibliothèques JavaScript ADF. Il est tout à fait possible qu'il y ait quelque chose dans la bibliothèque par défaut qui écrase vos paramètres d'image.

Je suggère d'utiliser Firebug pour ajouter un point d'arrêt javascript à la fonction onclick de l'un de vos outils, et de passer en revue le javascript de WebADF et de voir ce qui se passe.

+0

Je ne sais apparemment pas comment faire ça. Les éléments de la barre d'outils utilisent la fonction javascript ToolbarMouseDown. Cependant, je n'arrive pas à comprendre comment le déboguer. Je sais dans quel dossier il se trouve, mais cela ne fait pas partie de ma solution. Firebug montre juste le script comme un bloc minifié de javascript. Je suis sûr que ce que vous avez suggéré est ce qui se passe, je ne peux pas dire comment regarder ce qui se passe exactement dans le code. Avez-vous des idées sur le débogage de l'ADF Web? – Carter

Questions connexes