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

commits at geoext.org commits at geoext.org
Tue May 5 13:46:09 CEST 2009


Author: elemoine
Date: 2009-05-05 13:46:08 +0200 (Tue, 05 May 2009)
New Revision: 596

Modified:
   core/trunk/geoext/lib/GeoExt/data/FeatureReader.js
   core/trunk/geoext/tests/lib/GeoExt/data/FeatureReader.html
Log:
Add ability to use mapping for complex objects in FeatureReader, p=bbinet, r=me (closes #56)


Modified: core/trunk/geoext/lib/GeoExt/data/FeatureReader.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/data/FeatureReader.js	2009-05-05 00:09:55 UTC (rev 595)
+++ core/trunk/geoext/lib/GeoExt/data/FeatureReader.js	2009-05-05 11:46:08 UTC (rev 596)
@@ -102,8 +102,16 @@
                 if (feature.attributes) {
                     for (j = 0, lenJ = fields.length; j < lenJ; j++){
                         field = fields.items[j];
-                        v = feature.attributes[field.mapping || field.name] ||
-                            field.defaultValue;
+                        if (/[\[\.]/.test(field.mapping)) {
+                            try {
+                                v = new Function("obj", "return obj." + field.mapping)(feature.attributes);
+                            } catch(e){
+                                v = field.defaultValue;
+                            }
+                        }
+                        else {
+                            v = feature.attributes[field.mapping || field.name] || field.defaultValue;
+                        }
                         v = field.convert(v);
                         values[field.name] = v;
                     }

Modified: core/trunk/geoext/tests/lib/GeoExt/data/FeatureReader.html
===================================================================
--- core/trunk/geoext/tests/lib/GeoExt/data/FeatureReader.html	2009-05-05 00:09:55 UTC (rev 595)
+++ core/trunk/geoext/tests/lib/GeoExt/data/FeatureReader.html	2009-05-05 11:46:08 UTC (rev 596)
@@ -9,30 +9,35 @@
 
     <script type="text/javascript">
         function test_constructor(t) {
-            t.plan(2);
+            t.plan(3);
             var reader = new GeoExt.data.FeatureReader({}, [
                 {'name': 'foo'},
-                {'name': 'bar'}
+                {'name': 'bar', 'mapping': 'bar_mapped'}
             ]);
             var fields = reader.recordType.prototype.fields;
-            // 2 tests
+            // 3 tests
             t.eq(fields.items.length, 5, 'number of items is correct');
             t.ok(fields.items[3].name == 'foo' &&
                  fields.items[4].name == 'bar',
-                 'field values are correct');
+                 'field names are correct');
+            t.ok(fields.items[3].mapping === null &&
+                 fields.items[4].mapping == 'bar_mapped',
+                 'field mappings are correct');
         }
         function test_readRecords(t) {
-            t.plan(9);
+            t.plan(11);
             // setup
             var reader, features, info, records;
             reader = new GeoExt.data.FeatureReader({}, [
-                {'name': 'foo'},
-                {'name': 'bar'}
+                {'name': 'a'},
+                {'name': 'b', 'mapping': 'b_mapped'},
+                {'name': 'c', 'mapping': 'c_mapped.obj'}
             ]);
             features = [
                 new OpenLayers.Feature.Vector(null, {
-                    'foo': 'foo_0',
-                    'bar': 'bar_0'
+                    'a': 'a_value',
+                    'b_mapped': 'b_value',
+                    'c_mapped': {'obj': 'c_value'}
                 }),
                 new OpenLayers.Feature.Vector()
             ];
@@ -40,11 +45,13 @@
             features[0].state = OpenLayers.State.INSERT;
             features[1].fid = 2;
             features[1].state = OpenLayers.State.DELETE;
-            // 8 tests
+            // 10 tests
             info = reader.readRecords(features);
             records = info.records;
             t.eq(info.totalRecords, 2, 'readRecords returns correct number of records');
-            t.eq(records[0].get('foo'), 'foo_0', 'readRecords correctly set feature properties in record');
+            t.eq(records[0].get('a'), 'a_value', 'readRecords correctly set feature properties in record');
+            t.eq(records[0].get('b'), 'b_value', 'readRecords correctly set mapped feature properties in record');
+            t.eq(records[0].get('c'), 'c_value', 'readRecords correctly set complex mapped feature properties in record');
             t.eq(records[0].get('fid'), 1, 'readRecords correctly set feature fid in record');
             t.eq(records[0].get('state'), OpenLayers.State.INSERT, 'readRecords correctly set feature state in record');
             t.ok(records[0].get('feature') == features[0], 'readRecords correctly set feature in record');



More information about the Commits mailing list