[Commits] r1321 - in sandbox/elemoine/playground/geoext: lib/GeoExt/data lib/GeoExt/widgets tests/lib/GeoExt/data
commits at geoext.org
commits at geoext.org
Mon Aug 10 06:43:53 CEST 2009
Author: elemoine
Date: 2009-08-10 06:43:53 +0200 (Mon, 10 Aug 2009)
New Revision: 1321
Modified:
sandbox/elemoine/playground/geoext/lib/GeoExt/data/FeatureReader.js
sandbox/elemoine/playground/geoext/lib/GeoExt/data/FeatureStore.js
sandbox/elemoine/playground/geoext/lib/GeoExt/widgets/LegendWMS.js
sandbox/elemoine/playground/geoext/tests/lib/GeoExt/data/FeatureStore.html
Log:
svn merge -r1308:HEAD http://svn.geoext.org/core/trunk/geoext .
Modified: sandbox/elemoine/playground/geoext/lib/GeoExt/data/FeatureReader.js
===================================================================
--- sandbox/elemoine/playground/geoext/lib/GeoExt/data/FeatureReader.js 2009-08-10 04:42:05 UTC (rev 1320)
+++ sandbox/elemoine/playground/geoext/lib/GeoExt/data/FeatureReader.js 2009-08-10 04:43:53 UTC (rev 1321)
@@ -109,7 +109,9 @@
values.state = feature.state;
values.fid = feature.fid;
- records[records.length] = new recordType(values, feature.id);
+ // newly inserted features need to be made into phantom records
+ var id = (feature.state === OpenLayers.State.INSERT) ? undefined : feature.id;
+ records[records.length] = new recordType(values, id);
}
}
Modified: sandbox/elemoine/playground/geoext/lib/GeoExt/data/FeatureStore.js
===================================================================
--- sandbox/elemoine/playground/geoext/lib/GeoExt/data/FeatureStore.js 2009-08-10 04:42:05 UTC (rev 1320)
+++ sandbox/elemoine/playground/geoext/lib/GeoExt/data/FeatureStore.js 2009-08-10 04:43:53 UTC (rev 1321)
@@ -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: sandbox/elemoine/playground/geoext/lib/GeoExt/widgets/LegendWMS.js
===================================================================
--- sandbox/elemoine/playground/geoext/lib/GeoExt/widgets/LegendWMS.js 2009-08-10 04:42:05 UTC (rev 1320)
+++ sandbox/elemoine/playground/geoext/lib/GeoExt/widgets/LegendWMS.js 2009-08-10 04:43:53 UTC (rev 1321)
@@ -107,7 +107,7 @@
var url, layerName, styleName;
for (var i = 0, len = layers.length; i < len; i++){
layerName = layers[i];
- if(styles) {
+ if(styles && styles.length > 0) {
styleName = styleNames && styleNames[i];
if(styleName) {
Ext.each(styles, function(s) {
Modified: sandbox/elemoine/playground/geoext/tests/lib/GeoExt/data/FeatureStore.html
===================================================================
--- sandbox/elemoine/playground/geoext/tests/lib/GeoExt/data/FeatureStore.html 2009-08-10 04:42:05 UTC (rev 1320)
+++ sandbox/elemoine/playground/geoext/tests/lib/GeoExt/data/FeatureStore.html 2009-08-10 04:43:53 UTC (rev 1321)
@@ -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