[Commits] r1314 - in core/trunk/geoext: lib/GeoExt/data tests/lib/GeoExt/data
commits at geoext.org
commits at geoext.org
Sun Aug 9 03:32:06 CEST 2009
Author: tschaub
Date: 2009-08-09 03:32:05 +0200 (Sun, 09 Aug 2009)
New Revision: 1314
Modified:
core/trunk/geoext/lib/GeoExt/data/FeatureStore.js
core/trunk/geoext/tests/lib/GeoExt/data/FeatureStore.html
Log:
Use store.getRecordFromFeature to get the corresponding record for a feature. Before a feature (or record) has been persisted, the record id does not equal the feature id. r=elemoine (closes #143)
Modified: core/trunk/geoext/lib/GeoExt/data/FeatureStore.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/data/FeatureStore.js 2009-08-07 11:36:36 UTC (rev 1313)
+++ core/trunk/geoext/lib/GeoExt/data/FeatureStore.js 2009-08-09 01:32:05 UTC (rev 1314)
@@ -191,6 +191,27 @@
}
},
+ /** api: method[getRecordFromFeature]
+ * :arg feature: ``OpenLayers.Vector.Feature``
+ * :returns: :class:`GeoExt.data.FeatureRecord` The record corresponding
+ * to the given feature. Returns null if no record matches.
+ *
+ * Get the record corresponding to a feature.
+ */
+ getRecordFromFeature: function(feature) {
+ var record = null;
+ if(feature.state !== OpenLayers.State.INSERT) {
+ record = this.getById(feature.id);
+ } else {
+ var index = this.findBy(function(r) {
+ return r.get("feature") === feature;
+ });
+ if(index > -1) {
+ record = this.getAt(index);
+ }
+ }
+ return record;
+ },
/** private: method[onFeaturesAdded]
* Handler for layer featuresadded event
@@ -225,7 +246,7 @@
var features = evt.features, feature, record, i;
for(i=features.length - 1; i>=0; i--) {
feature = features[i];
- record = this.getById(feature.id);
+ record = this.getRecordFromFeature(feature);
if(record !== undefined) {
this._removing = true;
this.remove(record);
@@ -234,14 +255,14 @@
}
}
},
-
+
/** private: method[onFeatureModified]
* Handler for layer featuremodified event
*/
onFeatureModified: function(evt) {
if(!this._updating) {
var feature = evt.feature;
- var record = this.getById(feature.id);
+ var record = this.getRecordFromFeature(feature);
if(record !== undefined) {
record.beginEdit();
attributes = feature.attributes;
Modified: core/trunk/geoext/tests/lib/GeoExt/data/FeatureStore.html
===================================================================
--- core/trunk/geoext/tests/lib/GeoExt/data/FeatureStore.html 2009-08-07 11:36:36 UTC (rev 1313)
+++ core/trunk/geoext/tests/lib/GeoExt/data/FeatureStore.html 2009-08-09 01:32:05 UTC (rev 1314)
@@ -156,6 +156,35 @@
'Adding a record with "add" does not add feature to layer if addRecordFilter returns false');
}
+ function test_getRecordFromFeature(t) {
+ t.plan(2);
+
+ var layer = new OpenLayers.Layer.Vector();
+ var store = new GeoExt.data.FeatureStore({
+ layer: layer
+ });
+ var features = [
+ new OpenLayers.Feature.Vector(),
+ new OpenLayers.Feature.Vector()
+ ];
+ features[0].state = OpenLayers.State.INSERT;
+ layer.addFeatures(features);
+
+ var record;
+
+ // confirm that we can get a phantom record
+ record = store.getRecordFromFeature(features[0]);
+ t.ok((record && record.get("feature")) === features[0],
+ "phantom record retrieved");
+
+ // confirm that we can get a normal record
+ record = store.getRecordFromFeature(features[1]);
+ t.ok((record && record.get("feature")) === features[1],
+ "normal record retrieved");
+
+ layer.destroy();
+ }
+
function test_addFeatures_removeFeatures(t) {
t.plan(5);
@@ -163,7 +192,11 @@
var features = [
new OpenLayers.Feature.Vector(),
new OpenLayers.Feature.Vector()
- ];
+ ];
+
+ // set state of one feature to insert to test phantom record removal
+ features[0].state = OpenLayers.State.INSERT;
+
var layer = new OpenLayers.Layer.Vector("Foo layer");
var store = new GeoExt.data.FeatureStore({
layer: layer
@@ -198,6 +231,8 @@
foo: "foo",
bar: "bar"
});
+ // confirm that we can update phantom records
+ feature.state = OpenLayers.State.INSERT;
id = feature.id;
@@ -221,11 +256,12 @@
fields: recordType,
data: [feature]
});
+ record = store.getRecordFromFeature(feature);
- t.eq(store.getById(id).get("foo"), "foo",
+ t.eq(record.get("foo"), "foo",
"record gets correct initial value for property \"foo\"");
- t.eq(store.getById(id).get("bar"), "bar",
+ t.eq(record.get("bar"), "bar",
"record gets correct initial value for property \"bar\"");
/*
@@ -237,21 +273,20 @@
feature.attributes.bar = "bar2";
layer.events.triggerEvent("featuremodified", {feature: feature});
- t.eq(store.getById(id).get("foo"), "foo2",
+ t.eq(record.get("foo"), "foo2",
"featuremodified event causes update of record property \"foo\"");
- t.eq(store.getById(id).get("bar"), "bar2",
+ t.eq(record.get("bar"), "bar2",
"featuremodified event causes update of record property \"bar\"");
// update
- record = store.getById(id);
record.set("foo", "foo3");
record.set("bar", "bar3");
- t.eq(layer.getFeatureById(id).attributes.foo, "foo3",
+ t.eq(feature.attributes.foo, "foo3",
"update event causes update of feature property \"foo\"");
- t.eq(layer.getFeatureById(id).attributes.bar, "bar3",
+ t.eq(feature.attributes.bar, "bar3",
"update event causes update of feature property \"bar\"");
// make sure calling record.set didn't add any attributes
@@ -266,6 +301,7 @@
store.getById(feature2.id).set("bar", "bar_f2");
t.eq(feature2.attributes.bar, "bar_f2", "previously undefined attribute set correctly");
+
}
</script>
More information about the Commits
mailing list