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

 

在用户处于编辑状态时,如果需要放大地图,则要点击放大按钮,这时需要调用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);
}

你可能感兴趣的:(JavaScript)