[Users] variables in filter of LayerContainer loader
Bart van den Eijnden (OSGIS)
bartvde at osgis.nl
Fri Feb 11 16:50:00 CET 2011
Hi Frans,
make sure that your loader knows about the current theme, since filter is
called in the scope of the loader.
So when creating the loader, just give it an extra property e.g. named
theme, so as an example:
for (var key in themes) {
var loader = new GeoExt.tree.LayerLoader({
theme: themes[key],
filter: function() {
return (record.get("layer").options.themeId == this.theme);
},
... more stuff here
);
}
Best regards,
Bart
> 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
>
> _______________________________________________
> Users mailing list
> Users at geoext.org
> http://www.geoext.org/cgi-bin/mailman/listinfo/users
>
More information about the Users
mailing list