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

commits at geoext.org commits at geoext.org
Mon Apr 11 13:44:28 CEST 2011


Author: ahocevar
Date: 2011-04-11 13:44:28 +0200 (Mon, 11 Apr 2011)
New Revision: 2645

Modified:
   core/trunk/geoext/lib/GeoExt/data/FeatureStore.js
   core/trunk/geoext/tests/lib/GeoExt/data/FeatureStore.html
Log:
deprecating getRecordFromFeature, replacing it with getByFeature which returns undefined when no matching feature is found. r=bbinet (closes #381)

Modified: core/trunk/geoext/lib/GeoExt/data/FeatureStore.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/data/FeatureStore.js	2011-04-05 17:25:57 UTC (rev 2644)
+++ core/trunk/geoext/lib/GeoExt/data/FeatureStore.js	2011-04-11 11:44:28 UTC (rev 2645)
@@ -188,10 +188,23 @@
          *  :returns: :class:`GeoExt.data.FeatureRecord` The record corresponding
          *      to the given feature.  Returns null if no record matches.
          *
+         *  *Deprecated* Use getByFeature instead.
+         *
          *  Get the record corresponding to a feature.
          */
         getRecordFromFeature: function(feature) {
-            var record = null;
+            return this.getByFeature(feature) || null;
+        },
+        
+        /** api: method[getByFeature]
+         *  :arg feature: ``OpenLayers.Vector.Feature``
+         *  :returns: :class:`GeoExt.data.FeatureRecord` The record corresponding
+         *      to the given feature.  Returns undefined if no record matches.
+         *
+         *  Get the record corresponding to a feature.
+         */
+        getByFeature: function(feature) {
+            var record;
             if(feature.state !== OpenLayers.State.INSERT) {
                 record = this.getById(feature.id);
             } else {
@@ -238,7 +251,7 @@
                 var features = evt.features, feature, record, i;
                 for(i=features.length - 1; i>=0; i--) {
                     feature = features[i];
-                    record = this.getRecordFromFeature(feature);
+                    record = this.getByFeature(feature);
                     if(record !== undefined) {
                         this._removing = true;
                         this.remove(record);
@@ -254,7 +267,7 @@
         onFeatureModified: function(evt) {
             if(!this._updating) {
                 var feature = evt.feature;
-                var record = this.getRecordFromFeature(feature);
+                var record = this.getByFeature(feature);
                 if(record !== undefined) {
                     record.beginEdit();
                     var attributes = feature.attributes;

Modified: core/trunk/geoext/tests/lib/GeoExt/data/FeatureStore.html
===================================================================
--- core/trunk/geoext/tests/lib/GeoExt/data/FeatureStore.html	2011-04-05 17:25:57 UTC (rev 2644)
+++ core/trunk/geoext/tests/lib/GeoExt/data/FeatureStore.html	2011-04-11 11:44:28 UTC (rev 2645)
@@ -140,7 +140,7 @@
             t.eq(layer.features.length, 0, 'remove on store with "remove" removes the corresponding feature from layer'); 
         }
         
-        function test_getRecordFromFeature(t) {
+        function test_getByFeature(t) {
             t.plan(2);
 
             var layer = new OpenLayers.Layer.Vector();
@@ -157,12 +157,12 @@
             var record;
             
             // confirm that we can get a phantom record
-            record = store.getRecordFromFeature(features[0]);
+            record = store.getByFeature(features[0]);
             t.ok((record && record.getFeature()) === features[0],
                  "phantom record retrieved");
             
             // confirm that we can get a normal record
-            record = store.getRecordFromFeature(features[1]);
+            record = store.getByFeature(features[1]);
             t.ok((record && record.getFeature()) === features[1],
                  "normal record retrieved");
 
@@ -203,10 +203,11 @@
             layer.addFeatures(features);
             t.eq(store.getCount(), 0,
                  'Adding features to layer with "addFeatures" does not insert records in the store if featureFilter evaluates to false');
+
         }
 
         function test_featuremodified_update(t) {
-            t.plan(14);
+            t.plan(15);
 
             /*
              * Set up
@@ -242,7 +243,7 @@
                 fields: recordType,
                 data: [feature]
             });
-            record = store.getRecordFromFeature(feature);
+            record = store.getByFeature(feature);
 
             t.eq(record.get("foo"), "foo",
                  "record gets correct initial value for property \"foo\"");
@@ -309,6 +310,24 @@
             record.set("foo", "still insert");
             t.eq(feature.attributes.foo, "still insert", "attribute set");
             t.eq(feature.state, OpenLayers.State.INSERT, "insert state remains");
+            
+            // confirm that update doesn't cause errors for features that were
+            // filtered out
+            var filteredFeature = new OpenLayers.Feature.Vector();
+            filteredFeature.state = OpenLayers.State.INSERT;
+            store.featureFilter = new OpenLayers.Filter({
+                evaluate: function(feature) {
+                    return feature !== filteredFeature;
+                }
+            });
+            layer.addFeatures([filteredFeature]);
+            var ok = true;
+            try {
+                layer.events.triggerEvent("featuremodified", {feature: filteredFeature});
+            } catch(e) {
+                ok = false;
+            }
+            t.ok(ok, "modifying filtered out features does not cause errors");
 
         }
     </script> 



More information about the Commits mailing list