Всплывающее окно настраиваемого виджета ESRI WAB исчезает через 1 секунду - PullRequest
0 голосов
/ 27 сентября 2018

Я работаю над настраиваемым виджетом внутри панели для нашего WebApp на ESRI.Когда виджет активен, карта прослушивает события щелчка мыши.При запуске служба REST вызывается через ajax, и результат будет отображаться во всплывающем окне.

Если нет другого активного слоя, такого как WMS / WFS, все работает нормально.Но с другим активным слоем всплывающее окно появляется на секунду, а затем исчезает.

Есть идеи?

define(['dojo/_base/declare', 'jimu/BaseWidget', 'esri/layers/layer', 'dojo/dom-construct', 'esri/geometry/webMercatorUtils', 'https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js'],
  function(declare, BaseWidget, Layer, domConstruct, webMercatorUtils) {
    var map;
    return declare([BaseWidget], {
      baseClass: 'jimu-widget-myTest',
      name: 'myTest',

        customPopup: new Popup({
            offsetX: 10,
                offsetY: 10,
                visibleWhenEmpty: true
        },domConstruct.create("div")),

      startup: function() {
            map = this.map;         
            this.map._mapParams.infoWindow = this._customPopup;
      },

      onOpen: function(){
            document.getElementById(this.map.id).addEventListener("click", myClickListener);
      },



      onClose: function(){
            document.getElementById(this.map.id).removeEventListener("click", myClickListener);
      }

    });

    function myClickListener(evt) {
        if(evt.mapPoint) {

            var content = "";
            var mp = webMercatorUtils.webMercatorToGeographic(evt.mapPoint);
            lon = mp.x;
            lat = mp.y;

            var service_url = "xxxxxx";

            $.ajax({
                method: 'GET',
                url: service_url,
                dataType: 'json',
                error: function() {
                    console.log("Could not load data.");
                },
                success: function(result) {

                    for(var i = 0; i < result.values.length; i++) {
                        content += "<div class='test'>";
                        content += "<table style='width:100%'><tr><td><b>bli</b></td><td>" + result.values[i].bli + "</td></tr>" +
                                    "<tr><td><b>bla</b></td><td>" + result.values[i].bla + "</td></tr>" +
                                    "<tr><td><b>blub</b></td><td>" + result.values[i].blub + "</td></tr>";
                        content += "</table></div>";
                    }


                    map.infoWindow.setTitle("myTest");  
                    map.infoWindow.setContent(content);
                    map.infoWindow.show(evt.screenPoint);

                }

            });
        }
    }
  });

1 Ответ

0 голосов
/ 12 октября 2018

Проблема решена путем добавления слушателя таким образом

  onOpen: function(){
        map.on("click", myClickListener);
  },

, а не так

  onOpen: function(){
        document.getElementById(this.map.id).addEventListener("click", myClickListener);
  },
...