• 一个ArcGIS Javascript API的BUG和处理办法 调用两次Draw工具条deactivate方法导致的错误


    最近开始尝试用ArcGIS Server 9.3的Javascript API进行WebGIS系统的开发,这个项目需要实现矢量要素的编辑功能,同时我们又不希望使用ADF进行开发,因此需要自己来实现一些简单的地图编辑功能。还好需求只是对简单的点图层进行编辑,而这个功能早在ArcIMS时代我们就已经搞定了。现在有了Javascirpt API,更加方便我们开发编辑功能。

    我们对地图控件进行了配置,使其体验与桌面的编辑功能类似,即点击编辑,弹出编辑工具条,然后选择所要编辑的图层,往上面添加点。整个逻辑已经重复了很多很多遍了。在编辑的过程中,用户还可能使用放大缩小等浏览控件来对地图进行范围上的更新。

    为了尽量的减少开发量,我们使用了Javascirpt API内置的Draw工具条和Navigation工具条。在编辑的时候激活Draw工具条,在浏览的时候激活Navigation工具条,这个逻辑也没有问题。

    但是问题很快出现了,在用户处于编辑状态时,如果需要放大地图,则要点击放大按钮,这时需要调用DrawToolbar的deactivate方法,如果再次启动则调用activate(...)方法,这逻辑上也没问题,但今天调试的时候发现一个bug,即如果用户点击了放大按钮,我们调用了DrawToolbar的deactivate方法,而后用户又点击了缩小按钮或漫游按钮,DrawToolbar的deactivate方法被再次调用,这时鼠标与地图的交互就出现了问题,拉框矩形并没有随着鼠标移动的轨迹正确的移动。经调试发现这个bug只在多次调用DrawToolbar的deactivate方法时出现。

    于是迅速的查了一下Javacript api的sdk,看有没有DrawToolbar的某个属性表明当前是激活还是未激活状态的属性,可惜是没有,那么我们就只有用一个全局的变量来标识当前DrawToolbar的状态了,于是,如下的代码可以绕过这个比较明显的bug:

    //是否启用Draw工具条
    var EnableDraw = false;
    //激活绘制图形工具条(Workaround:因为它没有属性表明状态,所以用一个全局变量来对其状态进行标识)
    function ActivateDrawToolbar()
    {
        console.log(EnableDraw);
        
    if (EnableDraw === true)
        {
            
    return;
        }
        
    else
        {
            EnableDraw 
    = true;
            drawToolbar.activate(esri.toolbars.Draw.POINT);
        }
        console.log(EnableDraw);
    }
    //停止绘制图形工具条(Workaround:因为它没有属性表明状态,所以用一个全局变量来对其状态进行标识)
    function DeactivateDrawToolbar()
    {
        console.log(EnableDraw);
        
    if (EnableDraw === true)
        {
            drawToolbar.deactivate();
            EnableDraw 
    = false;
        }
        
    else
        {
            
    return;
        }
        console.log(EnableDraw);
    }

    记录下来免得大家犯类似的错误。

  • 相关阅读:
    BZOJ1076 [SCOI2008]奖励关 概率 状态压缩动态规划
    BZOJ1040 [ZJOI2008]骑士 基环树林(环套树) 树形动态规划
    洛谷1623 树的匹配 树形动态规划 高精度
    BZOJ1053 [HAOI2007]反素数ant 数论
    Vijos1906 联合权值 NOIP2014Day1T2 树形动态规划
    网络流24题 第五题
    网络流24题 第四题
    网络流24题 第三题
    网络流24题 第二题
    网络流24题 第一题
  • 原文地址:https://www.cnblogs.com/renji/p/1322612.html
Copyright © 2020-2023  润新知