首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ESRI WAB自定义小部件在1秒后消失。

ESRI WAB自定义小部件在1秒后消失。
EN

Stack Overflow用户
提问于 2018-09-27 06:42:41
回答 1查看 122关注 0票数 0

我正在为我们在ESRI上的WebApp开发一个面板自定义小部件。当小部件处于活动状态时,映射将监听鼠标单击事件。触发时,通过ajax调用REST服务,结果将显示在弹出窗口中。

如果没有像WMS/WFS活动这样的其他层,那么一切都正常。但是对于另一个活动层,弹出窗口会出现一秒钟,然后消失。

有什么想法吗?

代码语言:javascript
复制
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);

                }

            });
        }
    }
  });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-12 10:26:57

通过这样添加侦听器来解决问题。

代码语言:javascript
复制
  onOpen: function(){
        map.on("click", myClickListener);
  },

而不是像这样

代码语言:javascript
复制
  onOpen: function(){
        document.getElementById(this.map.id).addEventListener("click", myClickListener);
  },
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52530958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档