Lukas, This looks like a bug indeed. What seems to happen is the FeatureStore [addFeatures] calls loadRawData, which fires the 'load' event, which triggers [onLoad] that calls this.layer.removeAllFeatures() before adding the new ones. Writing a test to replicate what your trying to do should reproduce the issue.
Without testing it and from what I understand, here's what I think could solve the problem. The [LayerStore] used to have that same issue and it was changed. The LayerModel has a static method to build new [layer model instances] that can then be added/inserted/removed with standard store methods. In brief, it should use the loadRawData method, but add instead. Would you send a pull request with a fix and tests or simply create an issue on github, please ? [addFeatures] https://github.com/geoext/geoext2/blob/master/src/GeoExt/data/FeatureStore.js#L206 [onLoad] https://github.com/geoext/geoext2/blob/master/src/GeoExt/data/FeatureStore.js#L319 [LayerStore] https://github.com/geoext/geoext2/commit/c2d5993714a4201d4c190f29eeae63b3e51d4d6e [layer model instances] https://github.com/geoext/geoext2/blob/master/src/GeoExt/data/LayerModel.js#L18 On 12-05-29 02:32 AM, Lukas Vonlanthen wrote: > Dear list, > > Using ExtJS 4 (4.0.7) and GeoExt 2, I am having troubles synchronizing > the FeatureStore with a VectorLayer. When I try to add a second > Feature to the FeatureStore (or the VectorLayer), it appears only in > the FeatureStore but NOT in the VectorLayer (and therefore not on the > map). > > <File: Project.store.ActivityPoints> > Ext.define('Project.store.ActivityPoints', { > extend: 'GeoExt.data.FeatureStore', > model: 'Project.model.Activity', > autoLoad: false > }); > > <File: Project.controller.Map> > ... > onPanelRendered: function(comp) { > var layer = comp.getMap().getLayersByName('vector')[0]; > var store = Ext.data.StoreManager.lookup('ActivityPoints'); > store.bind(layer); > } > ... > > <File: Project.view.map.MapPanel> > ... > map: { > displayProjection: new OpenLayers.Projection("EPSG:4326"), > layers: [ > new OpenLayers.Layer.OSM('Mapnik'), > new OpenLayers.Layer.Vector("vector") > ], > projection: new OpenLayers.Projection("EPSG:900913") > }, > tbar: { > items: [{ > text: 'click', > handler: function() { > var layer = map.getLayersByName('vector')[0]; > var store = > Ext.data.StoreManager.lookup('ActivityPoints'); > var point1 = new OpenLayers.Feature.Vector(new > OpenLayers.Geometry.Point(9446238, 746333), { > id: 'point1' > }); > var point2 = new OpenLayers.Feature.Vector(new > OpenLayers.Geometry.Point(9447238, 747333), { > id: 'point2' > }); > layer.addFeatures([point1]); > console.log(store.count()); // 1 > console.log(layer.features.length); // 1 > console.log(layer.features[0] == point1); // true > layer.addFeatures([point2]); > console.log(store.count()); // 2 > console.log(layer.features.length); // 1 (!!!) > console.log(layer.features[0] == point2); // true > } > }] > } > ... > > As you can see, the VectorLayer just does not seem to take more than > one Feature and always contains just the last added Feature. It also > does not make any difference if I change to > store.addFeatures([point1]) or if I try to add Features directly (not > in an array). > > It would work if I add all the Features at once: > layer.addFeatures([point1, point2]), but I would like to add the > Features one at a time. > > What am I doing wrong here? Any help is very much appreciated. Thanks! > With best regards, Lukas. > > > _______________________________________________ > Users mailing list > [email protected] > http://www.geoext.org/cgi-bin/mailman/listinfo/users -- Alexandre Dubé Mapgears www.mapgears.com _______________________________________________ Users mailing list [email protected] http://www.geoext.org/cgi-bin/mailman/listinfo/users
