Mehr

Benutzerdefiniertes Web AppBuilder-Widget kann nicht programmgesteuert geschlossen werden

Benutzerdefiniertes Web AppBuilder-Widget kann nicht programmgesteuert geschlossen werden


Ich erstelle ein benutzerdefiniertes Widget in ArcGIS Web AppBuilder.

Auf dieser Seite wird gezeigt, wie Sie mit dem WidgetManager ein Widget programmgesteuert schließen können, sodass der Benutzer nicht manuell auf die X-Schaltfläche klicken muss.

Der Unterschied zwischen dem Beispielcode auf der obigen Seite und dem Code in meinem Widget besteht darin, dass ich aerklärenTeil meiner Klasse wie folgt:

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

Innerhalb einer onClick-Funktion oben versuche ich anzurufenWidgetManager.getInstance.closeWidget(this.id), wie im Codebeispiel auf der ESRI-Seite empfohlen. Dies funktioniert nicht und der Fehler ist stumm.

Ich bin ein Dojo/Web AppBuilder-Neuling, aber das verstehe ich vageerklärenerstellt eine neue Instanz einer Klasse, während die ESRI-Website anscheinend verwendet wirdWidgetManagerauf abstraktere Weise. Hat das was damit zu tun?


Das erste, was mir aufgefallen ist, ist, dass WidgetManager.getInstance a . ist Funktion, was bedeutet, dass Sie es mit aufrufen müssen

WidgetManager.getInstance()

Ich habe noch nicht mit dem Web-App-Builder gearbeitet, aber soweit ich das beurteilen kann, ist der WidgetManager eine Singleton-Klasse (die Klasse wird einmal erstellt und in der gesamten Anwendung verwendet). Der Aufruf der Funktion getInstance der Klasse gibt dieWidgetManagerInstanz, von der aus Sie auf ihre in der API dokumentierten Eigenschaften und Methoden zugreifen können

Platzieren Sie als Ausgangspunkt für das Debuggen a

console.log('klick');

im onClick-Handler. Dadurch wird sichergestellt, dass Ihre Funktion tatsächlich benannt und richtig platziert ist.

Versuchen Sie als Nächstes, die Funktion console.log zu verwenden, um sicherzustellen, dass Sie über gültige Eigenschaften verfügen. Beispiel:

console.log(diese.id)

Declare erstellt nicht wirklich eine neue Instanz einer Klasse, es "deklariert" einfach eine neue Klasse, aus der ein Entwickler mit etwas wie neue Instanzen erstellen kann

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

In Ihrem Fall deklarieren Sie eine neue Klasse, die vom . erbtBaseWidgetKlasse, was bedeutet, dass Ihre Klasse die Funktionen und Eigenschaften derBaseWidget.

Hoffe das hilft.