2010-10-26 2 views
0

У меня есть карта GeoExt с функцией масштабирования. Мне бы очень хотелось отключить некоторые узлы в панели дерева, когда слои на моей карте «вне диапазона», а их setVisibility установлено в false. У меня есть мое событие zoomend, и у меня также есть событие checkchange, но событие 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

Если узлы не имеют идентификатор, связанный со слоем, какова связь между этими двумя? Выбираются ли они, когда отображается слой или выполняется другое свойство? Как вы можете идентифицировать узлы для отключения (по какому свойству)? – SW4

+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 (false); \t \t \t \t \t tib_townships.setVisibility (ложь), ' – elshae

+0

В основном я хочу какое-то образом, что, когда слой выключен' setVisibility (ложного) ', узел получает отключен – elshae

ответ

1

Оказалось, что работа для нас уже выполнена :). Существует патч на http://trac.geoext.org/attachment/ticket/235/autoDisableLayerNode.patch, который будет автоматически включать/отключать узлы на основе их свойств minScale/maxScale и т.д. Я применил патч, поставив этот файл в моем каталоге GeoExt и выполнив следующую команду в моем GeoExt каталоге:

patch -p0 < autoDisableLayerNode.patch

Надеюсь, это поможет! Он творил чудеса для меня :)

elshae