You are using some very fragile methods there.
Rather than depending on lastChild & firstChild and the fact that they may or 
may not only contain leaf nodes, etc..., you should be using the standard ExtJS 
TreeNode walking functions.

node.bubble
http://dev.sencha.com/deploy/dev/docs/?class=Ext.tree.TreeNode#Ext.data.Node-bubble

node.cascade
http://dev.sencha.com/deploy/dev/docs/?class=Ext.tree.TreeNode#Ext.data.Node-cascade

node.eachChild
http://dev.sencha.com/deploy/dev/docs/?class=Ext.tree.TreeNode#Ext.data.Node-eachChild

Bubble walks up the tree toward the root node, starting with the node it is 
called on
Cascade walks down the tree (through each child branch as well) starting with 
the node it is called on
EachChild iterates over ONLY the child nodes of the node it is called on. It 
will NOT continue any further down the child branches and will not include the 
node it is called on

You should be able to use these functions to collect the information you need 
from your layer tree (node.getUI().isChecked(), etc..) and then reapply it to 
the tree formed with the different layer store.

If you want to start at a certain node other than the Root Node, then assign 
that node an id and find it in the tree panel using the TreePanel.getNodeById 
function
http://dev.sencha.com/deploy/dev/docs/?class=Ext.tree.TreePanel#Ext.data.Tree-getNodeById

Matt Priour
Kestrel Computer Consulting



From: IT Intern 
Sent: Wednesday, October 20, 2010 12:02 PM
To: [email protected] 
Subject: Re: [Users] Keeping Selected Layers When Replacing Child Nodes


Ok so far I have been able to find a way to access the properties of 
nodes...now I am struggling to find out if there is anyway to access the 
properties of the node's leafs?  If anyone know please help me, I think if I 
have that I will be able to carry out the desired task :)

Some code of my approach:

var i;
                            var j = 0;
                            var selectedLayers = new Array();
                            while(layerRoot.lastChild.hasChildNodes()){
                                
alert(layerRoot.lastChild.firstChild.childNodes.length); //This returns 0, but 
the childNodes here are leafs :(
                                for(i = 0; i < 
layerRoot.lastChild.firstChild.childNodes.length; i++){
                                    
if(layerRoot.lastChild.firstChild.childNodes[i].isSelected()){
                                        selectedLayers[j] = 
layerRoot.lastChild.firstChild.childNodes[i].attributes.text;
                                        alert(selectedLayers[j]);
                                        j++;
                                    } 
                                }
                                
                                
layerRoot.lastChild.removeChild(layerRoot.lastChild.firstChild);
                            }
                            layerRoot.removeChild(layerRoot.lastChild);    
                        }

Thanks for taking the time to consider my questions,

elshae


On Tue, Oct 19, 2010 at 4:17 PM, IT Intern <[email protected]> wrote:

  Hello GeoExt Friends,

  So I have been using the GeoExt and Ext libraries to develop my map browser 
and now there's a feature I'd like to have, but don't know how to go about it :)

  So far everything is working.  What I have is a tree panel that when a menu 
is clicked a parent node with layer containers is added to the tree.  The 
layers in these containers are in different languages, so as the user toggles 
between the languages in the menu, it be nice if the layers in the previous 
language correspond to the language that is currently selected.  I hope you 
will understand what I am asking to do.  I guess a good starting point would 
be, is there a way to "get" which layers are selected in a layer container?  
Thanks for your time, below is some relevant code:

  //So there are many layers, one each per language...

  var chn_townships = new OpenLayers.Layer.WMS(
                              "Townships (Chinese trans)", 
"http://localhost:8080/geoserver/wms";, {layers: 'cite:chn_townships', 
transparent: true}, {isBaseLayer: false, displayInLayerSwitcher: true, 
visibility: false}
                         );
                      
              var tib_townships = new OpenLayers.Layer.WMS(
                              "Townships (Tibetan trans)", 
"http://localhost:8080/geoserver/wms";, {layers: 'cite:tib_townships', 
transparent: true}, {isBaseLayer: false, displayInLayerSwitcher: true, 
visibility: true} 
                         );  

  //The layers are stored in layer stores...
  var tibLands = new GeoExt.data.LayerStore({
                  map: map,
                  initDir: 0,
                  layers: [tib_villages, tib_townships, tib_farms, tib_countys]
              });

              var chnLands = new GeoExt.data.LayerStore({
                  map: map,
                  initDir: 0,
                  layers: [chn_villages, chn_townships, chn_farms, chn_countys]
              });

  //Menu for users to select language
  var languageMenu = new Ext.menu.Menu({
                  id: 'mainMenu',
                  style: {
                      overflow: 'visible'     // For the Combo popup
                  },
                  items: [
                      // A Field in a Menu
                      {
                          text: 'Chinese',
                          checked: false,
                          group: 'theme',
                          icon: './gif/cn.gif',
                             handler: checkHandler
                      },{
                          text: 'English',
                          checked: true,
                          group: 'theme',
                          handler: checkHandler
                      },{
                          text: 'Tibetan',
                          checked: false,
                          group: 'theme',
                          handler: checkHandler
                          }
                  ]
              });

  //The handler function that listens to the users selection on the menu (This 
is where I want the magic to happen ;)
  function checkHandler(item, checked) {
                      var tibetContainer, chineseContainer;
                      
                      if(item.text == 'Tibetan'){
                          if(layerRoot.lastChild.id == 'chinese'){
                              layerRoot.removeChild(layerRoot.lastChild);    
                          }
                          
                          tibetContainer = new Ext.tree.TreeNode({
                              text: "Tibetan Labels",
                              expanded: true,
                              id: 'tibet'
                          });

                          tibetContainer.appendChild(new 
GeoExt.tree.OverlayLayerContainer({
                              text: "Lands (Tibetan trans)",
                              layerStore: tibLands,
                              expanded: false,
                              loader: {param: "LAYERS"}
                          }));

                          tibetContainer.appendChild(new 
GeoExt.tree.OverlayLayerContainer({
                              text: "Natural Selection (Tibetan trans)",
                              layerStore: tibNaturalLayers,
                              expanded: false,
                              loader: {param: "LAYERS"}
                          }));

                          tibetContainer.appendChild(new 
GeoExt.tree.OverlayLayerContainer({
                              text: "Points of Interest (Tibetan trans)",
                              layerStore: tibPointOfInterest,
                              expanded: false,
                              loader: {param: "LAYERS"}
                          }));

                          layerRoot.appendChild(tibetContainer);

                      }
                      else if(item.text == 'Chinese'){
                          
                          chineseContainer = new Ext.tree.TreeNode({
                              text: "Chinese Labels",
                              expanded: true,
                              id: 'chinese'
                          });

                          chineseContainer.appendChild(new 
GeoExt.tree.OverlayLayerContainer({
                              text: "Lands (Chinese trans)",
                              layerStore: chnLands,
                              expanded: false,
                              loader: {param: "LAYERS"}
                          }));

                          chineseContainer.appendChild(new 
GeoExt.tree.OverlayLayerContainer({
                              text: "Natural Selection (Chinese trans)",
                              layerStore: chnNaturalLayers,
                              expanded: false,
                              loader: {param: "LAYERS"}
                          }));

                          chineseContainer.appendChild(new 
GeoExt.tree.OverlayLayerContainer({
                              text: "Points of Interest (Chinese trans)",
                              layerStore: chnPointOfInterest,
                              expanded: false,
                              loader: {param: "LAYERS"}
                          }));

                          if(layerRoot.lastChild.id == 'tibet'){
                              //layerRoot.removeChild(layerRoot.lastChild);    
                              layerRoot.replaceChild(chineseContainer, 
layerRoot.lastChild)  //thought this might have done it, this just replaces the 
nodes but not the layers selected to the new ones :(
                          }else
                          {layerRoot.appendChild(chineseContainer);}

                      }





--------------------------------------------------------------------------------


_______________________________________________
Users mailing list
[email protected]
http://www.geoext.org/cgi-bin/mailman/listinfo/users
_______________________________________________
Users mailing list
[email protected]
http://www.geoext.org/cgi-bin/mailman/listinfo/users

Reply via email to