[Commits] r346 - in core/trunk/geoext: lib/GeoExt/data tests/lib/GeoExt/data

commits at geoext.org commits at geoext.org
Fri Apr 3 18:08:18 CEST 2009


Author: tschaub
Date: 2009-04-03 18:08:18 +0200 (Fri, 03 Apr 2009)
New Revision: 346

Modified:
   core/trunk/geoext/lib/GeoExt/data/LayerStore.js
   core/trunk/geoext/tests/lib/GeoExt/data/LayerStore.html
Log:
Take care not to add records twice when calling store.add.  r=ahocevar (closes #36)

Modified: core/trunk/geoext/lib/GeoExt/data/LayerStore.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/data/LayerStore.js	2009-04-03 16:06:15 UTC (rev 345)
+++ core/trunk/geoext/lib/GeoExt/data/LayerStore.js	2009-04-03 16:08:18 UTC (rev 346)
@@ -136,10 +136,12 @@
      * evt - {Object}
      */
     onAddLayer: function(evt) {
-        var layer = evt.layer;
-        this._adding = true;
-        this.add((this.reader.readRecords([layer])).records);
-        delete this._adding;
+        if(!this._adding) {
+            var layer = evt.layer;
+            this._adding = true;
+            this.add((this.reader.readRecords([layer])).records);
+            delete this._adding;
+        }
     },
     
     /**
@@ -150,10 +152,12 @@
      * evt - {Object}
      */
     onRemoveLayer: function(evt){
-        var layer = evt.layer;
-        this._removing = true;
-        this.remove(this.getById(layer.id));
-        delete this._removing;
+        if(!this._removing) {
+            var layer = evt.layer;
+            this._removing = true;
+            this.remove(this.getById(layer.id));
+            delete this._removing;
+        }
     },
     
     /**
@@ -167,9 +171,11 @@
      */
     onAdd: function(store, records, index) {
         if(!this._adding) {
+            this._adding = true;
             for(var i=0; i<records.length; ++i) {
                 this.map.addLayer(records[i].get("layer"));
             }
+            delete this._adding;
         }
     },
     
@@ -184,7 +190,9 @@
      */
     onRemove: function(store, record, index){
         if(!this._removing) {
+            this._removing = true;
             this.map.removeLayer(record.get("layer"));
+            delete this._removing;
         }
     }
 };

Modified: core/trunk/geoext/tests/lib/GeoExt/data/LayerStore.html
===================================================================
--- core/trunk/geoext/tests/lib/GeoExt/data/LayerStore.html	2009-04-03 16:06:15 UTC (rev 345)
+++ core/trunk/geoext/tests/lib/GeoExt/data/LayerStore.html	2009-04-03 16:08:18 UTC (rev 346)
@@ -73,6 +73,27 @@
             t.eq(map.layers.length,1,"Adding layer to MapPanel's LayerStore adds only one layer to map");
             t.eq(mapPanel.layers.getCount(),1,"Adding layers to MapPanel's LayerStore does not create duplicate layers"); 
         }
+        
+        function test_add_remove(t) {
+            
+            t.plan(2);
+            
+            var map = new OpenLayers.Map("mappanel");
+            var store = new GeoExt.data.LayerStore({
+                map: map
+            });
+            var record = new GeoExt.data.LayerRecord({
+                layer: new OpenLayers.Layer.Vector()
+            });
+
+            store.add([record]);
+            t.eq(store.getCount(), 1, "adding a single record to the store adds one record");
+            
+            store.remove(record);
+            t.eq(store.getCount(), 0, "removing a single record from the store removes one record");
+            
+        }
+        
     </script>
   <body>
     <div id="mappanel"></div>



More information about the Commits mailing list