[Users] variables in filter of LayerContainer loader

Frans Knibbe frans.knibbe at geodan.nl
Fri Feb 11 16:38:26 CET 2011


Hello Seth,

The themes and theme variables are defined before the loop. I have just 
done some further testing: When the filter function is called it will 
always use the last setting of the "theme" variable. So the filter 
function is not used within the loop, but afterwards.

As an example, let's assume the themes are 'vegetation', 'water' and 
'roads'. I want to loop through those themes and build 
GeoExt.tree.LayerContainer nodes where the theme matches a layer 
property. What I see now is that the value 'roads' is always used for 
matching because it is the last value in the theme array.

In Firebug I see that the line with the filter function is executed at 
the moment when I expand the node. So that is completely after the loop. 
I see the the line is called outside the loop if I set "expanded: true", 
too.

My approach is obviously wrong but I have no idea how to progress. Could 
there be a way of creating LayerContainers in a loop that use loaders 
that match with a literal instead of a variable?

Frans

On 2011-02-11 11:53, geographika wrote:
> Hi,
>
> Where are your themes and theme variables defined? They will need to 
> be in the scope of the filter function to work correctly.
> Try putting a debugger; statement in to see exactly what is in these 
> variables (I'd imagine undefined at the moment).
> filter: function(record){
> 	debugger;
>          return (record.get("layer").options.themeId == themes[theme].id);
> }
>
> Regards,
>
> Seth
> --
> web:http://geographika.co.uk
> twitter: @geographika
>
> On 11/02/2011 11:32, Frans Knibbe wrote:
>> Hello!
>>
>> I am trying to create several GeoExt.tree.LayerContainer nodes in my
>> layer tree. I want to group layers by a custom attribute (themes) that I
>> have added to the OpenLayers layer definition. Let's call this attribute
>> 'themeId'. It could have values like 'vegetation', 'water', 'roads',
>> etc.. What I want to do is loop though the themes and create
>> .LayerContainers for matching layers. I am doing this by means of a
>> filter of the GeoExt.tree.LayerLoader, which looks like this:
>>
>> filter: function(record){
>>          return (record.get("layer").options.themeId == themes[theme].id);
>> }
>>
>> My problem is that the filter does not work :-). This seems to be caused
>> by the variable holding the theme ID ( themes[theme].id in the example
>> above) being unknown at them time the filter function is executed. If I
>> exchange the variable with a string everything works fine, like this:
>>
>> filter: function(record){
>>          return (record.get("layer").options.themeId == 'vegetation');
>> }
>>
>> So my question is: Can I somehow get the variable to have the right
>> value at the time the filter function is executed? Or is there another
>> way of dynamically building LayerContainers I could try?
>>
>> Thanks!
>> Frans
>>
>>
>>
>> _______________________________________________
>> Users mailing list
>> Users at geoext.org
>> http://www.geoext.org/cgi-bin/mailman/listinfo/users
>>
>
>
> _______________________________________________
> Users mailing list
> Users at geoext.org
> http://www.geoext.org/cgi-bin/mailman/listinfo/users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.geoext.org/pipermail/users/attachments/20110211/46f68236/attachment.htm 


More information about the Users mailing list