Also, for the record : GeoExt2 was developed using Ext 4.1.0. Best regards,
Alexandre On 12-05-29 08:35 AM, Alexandre Dube wrote: > 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
