2010-10-26 49 views
0

我有一个变焦控制GeoExt地图面板的事件。当我的地图上的图层“超出范围”,即他们的setVisibility设置为false时,我真的想禁用树面板中的一些节点。我有我的zoomend事件工作,我也有一个checkchange事件的工作,但如果用户按下zoombar多个级别,另一个问题是checkchange事件被评估一次以上,即使以后zoomend事件结束checkchange仍每次用户仅点击节点的复选框就会被触发。我真的需要一种方法来控制这个checkchange事件只运行一次,并从如果用户不使用zoombar射击阻止它......火后,才另一个事件已经被解雇

map.events.on({ "zoomend": function (e) { 

       layerTree.on("checkchange", function (node, checked) { 
        alert(node.text + "Inside event"); 
        if(checked == false) 
         node.disable(); 
        else if(checked == true) 
         node.enable(); 

       }); 

        if (this.getZoom() > 7) { 
         tib_villages.setVisibility(true); 
         tib_lakes.setVisibility(true); 
         tib_townships.setVisibility(true); 


        } 
        else { 

            tib_villages.setVisibility(false); 
            tib_lakes.setVisibility(false); 
            tib_townships.setVisibility(false); 

         if (this.getZoom() > 5) { 
          infrastructure.setVisibility(true); 
          geography.setVisibility(true); 
          geography2.setVisibility(true); 
          tib_countys.setVisibility(true); 

         } 
         else{ 
          infrastructure.setVisibility(false); 
          geography.setVisibility(false); 
          geography2.setVisibility(false); 
          tib_countys.setVisibility(false); 
         } 
        }//end else 

       }//end function (e) 

      }); //end map.events.on 

感谢您所有的时间和反馈:)

elshae

+0

如果节点没有与图层相关的id,两者之间的联系是什么?它们是在图层显示还是另一个属性匹配时选择的?你如何识别要禁用的节点(在什么属性上)? – SW4 2010-10-27 14:20:10

+0

那么我的节点的文字就等于我的图层的显示文字。我多想了一会儿,想着也许有办法解决某种事件,但我还没有能够解决这个问题。下面是一个尝试: 'layerRoot.on( “checkchange” 功能(节点){ \t \t \t \t \t \t \t \t \t \t警报(node.text + “内部事件”); \t \t \t \t \t \t \t \t \t \t node.disable(); \t \t \t \t \t \t \t \t \t}); \t \t \t \t \t \t \t \t \t tib_villages.setVisibility(假); \t \t \t \t \t tib_lakes.setVisibility(假); \t \t \t \t \t tib_townships.setVisibility(假);' – elshae 2010-10-27 16:13:50

+0

基本上我想某种方式使得当层通过'setVisibility(假)'关断时,节点被停用 – elshae 2010-10-27 16:18:45

回答

1

事实证明,这项工作已经为我们做了:)。有一个在http://trac.geoext.org/attachment/ticket/235/autoDisableLayerNode.patch一个补丁,它会自动禁用/根据自己minScale/maxScale性能等使节点通过我把这个文件在我GeoExt目录,并在我的GeoExt目录中运行以下命令应用补丁:

patch -p0 < autoDisableLayerNode.patch

我希望这有助于!它为我工作奇迹:)

elshae