Suite

Impossible de fermer le widget Web AppBuilder personnalisé par programmation

Impossible de fermer le widget Web AppBuilder personnalisé par programmation


Je crée un widget personnalisé dans ArcGIS Web AppBuilder.

Cette page montre comment vous pouvez utiliser le WidgetManager pour fermer un widget par programmation, évitant ainsi à l'utilisateur d'avoir à cliquer manuellement sur le bouton X.

La différence entre l'exemple de code donné sur la page ci-dessus et le code de mon widget est que j'ai undéclarerpartie de ma classe comme ceci:

define(['dojo/_base/declare', 'jimu/BaseWidget', 'jimu/WidgetManager', 'dojo/dom-style'], function(declare, BaseWidget, WidgetManager, style) { return declare([BaseWidget], {… }); });

Dans une fonction onClick ci-dessus, j'essaie d'appelerWidgetManager.getInstance.closeWidget(this.id), comme recommandé par l'exemple de code sur la page ESRI. Cela ne fonctionne pas et l'échec est silencieux.

Je suis un débutant Dojo/Web AppBuilder, mais je comprends vaguement quedéclarercrée une nouvelle instance d'une classe, alors que le site Web d'ESRI semble utiliserGestionnaire de widgetsd'une manière plus abstraite. Cela a-t-il quelque chose à voir avec ça ?


la première chose que j'ai remarquée, c'est que le WidgetManager.getInstance est un une fonction, ce qui signifie que vous devez l'appeler en utilisant

WidgetManager.getInstance()

Je n'ai pas encore travaillé avec le constructeur d'applications Web, mais d'après ce que je peux dire, le WidgetManager est une classe Singleton (la classe est créée une fois et utilisée dans toute l'application). L'appel de la fonction getInstance de la classe renvoie leGestionnaire de widgetsinstance à partir de laquelle vous pouvez accéder à ses propriétés et méthodes documentées dans l'API

Comme point de départ pour le débogage, placez un

console.log('clic');

dans le gestionnaire onClick. Cela garantira que votre fonction est bien nommée et placée correctement.

Essayez ensuite d'utiliser la fonction console.log pour vous assurer que vous disposez de propriétés valides. Exemple:

console.log(this.id)

Declare ne crée pas réellement une nouvelle instance d'une classe, il "déclare" simplement une nouvelle classe à partir de laquelle un développeur peut créer de nouvelles instances en utilisant quelque chose comme

var widget = new YourWidget({ property: 'value' }, "widgetNode");

Dans votre cas, vous déclarez une nouvelle classe qui hérite de laBaseWidgetclass, ce qui signifie que votre classe héritera des fonctions et propriétés duBaseWidget.

J'espère que cela t'aides.


Voir la vidéo: iOS 14 Widgets Not Working