Mais

Não é possível fechar o widget Web AppBuilder personalizado programaticamente

Não é possível fechar o widget Web AppBuilder personalizado programaticamente


Estou criando um widget customizado no ArcGIS Web AppBuilder.

Esta página mostra como você pode usar o WidgetManager para fechar um widget programaticamente, evitando que o usuário tenha que clicar no botão X manualmente.

A diferença entre o código de exemplo fornecido na página acima e o código em meu widget é que eu tenho umdeclararparte da minha aula assim:

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

Dentro de uma função onClick acima, tento chamarWidgetManager.getInstance.closeWidget (this.id), conforme recomendado pelo exemplo de código na página ESRI. Isso não funciona e a falha é silenciosa.

Eu sou um novato em Dojo / Web AppBuilder, mas eu vagamente entendo quedeclararcria uma nova instância de uma classe, enquanto o site da ESRI parece estar usandoWidgetManagerde uma forma mais abstrata. Isso tem alguma coisa a ver com isso?


a primeira coisa que notei é que WidgetManager.getInstance é um função, o que significa que você precisa chamá-lo usando

WidgetManager.getInstance ()

Eu não trabalhei com o construtor de aplicativos da web ainda, mas pelo que posso dizer, o WidgetManager é uma classe Singleton (a classe é criada uma vez e usada em todo o aplicativo). Chamar a função getInstance da classe retorna oWidgetManagerinstância a partir da qual você pode acessar suas propriedades e métodos documentados na API

Como ponto de partida para a depuração, coloque um

console.log ('clique');

no manipulador onClick. Isso garantirá que sua função seja realmente nomeada e posicionada corretamente.

Em seguida, tente usar a função console.log para verificar se você possui propriedades válidas. Exemplo:

console.log (this.id)

Declare não cria realmente uma nova instância de uma classe, simplesmente "declara" uma nova classe a partir da qual um desenvolvedor pode criar novas instâncias usando algo como

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

No seu caso, você está declarando uma nova classe que herda doBaseWidgetclasse, o que significa que sua classe herdará as funções e propriedades doBaseWidget.

Espero que isto ajude.