[Users] variables in filter of LayerContainer loader

Frans Knibbe frans.knibbe at geodan.nl
Fri Feb 11 17:03:37 CET 2011


Bart, you are an angel! That was exactly what I was looking for!

Thanks a lot,
Frans

On 2011-02-11 16:50, Bart van den Eijnden (OSGIS) wrote:
> 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