Changeset 596

Show
Ignore:
Timestamp:
05/05/09 13:46:08 (1 year ago)
Author:
elemoine
Message:

Add ability to use mapping for complex objects in FeatureReader, p=bbinet, r=me (closes #56)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • core/trunk/geoext/lib/GeoExt/data/FeatureReader.js

    r588 r596  
    103103                    for (j = 0, lenJ = fields.length; j < lenJ; j++){ 
    104104                        field = fields.items[j]; 
    105                         v = feature.attributes[field.mapping || field.name] || 
    106                             field.defaultValue; 
     105                        if (/[\[\.]/.test(field.mapping)) { 
     106                            try { 
     107                                v = new Function("obj", "return obj." + field.mapping)(feature.attributes); 
     108                            } catch(e){ 
     109                                v = field.defaultValue; 
     110                            } 
     111                        } 
     112                        else { 
     113                            v = feature.attributes[field.mapping || field.name] || field.defaultValue; 
     114                        } 
    107115                        v = field.convert(v); 
    108116                        values[field.name] = v; 
  • core/trunk/geoext/tests/lib/GeoExt/data/FeatureReader.html

    r280 r596  
    1010    <script type="text/javascript"> 
    1111        function test_constructor(t) { 
    12             t.plan(2); 
     12            t.plan(3); 
    1313            var reader = new GeoExt.data.FeatureReader({}, [ 
    1414                {'name': 'foo'}, 
    15                 {'name': 'bar'
     15                {'name': 'bar', 'mapping': 'bar_mapped'
    1616            ]); 
    1717            var fields = reader.recordType.prototype.fields; 
    18             // 2 tests 
     18            // 3 tests 
    1919            t.eq(fields.items.length, 5, 'number of items is correct'); 
    2020            t.ok(fields.items[3].name == 'foo' && 
    2121                 fields.items[4].name == 'bar', 
    22                  'field values are correct'); 
     22                 'field names are correct'); 
     23            t.ok(fields.items[3].mapping === null && 
     24                 fields.items[4].mapping == 'bar_mapped', 
     25                 'field mappings are correct'); 
    2326        } 
    2427        function test_readRecords(t) { 
    25             t.plan(9); 
     28            t.plan(11); 
    2629            // setup 
    2730            var reader, features, info, records; 
    2831            reader = new GeoExt.data.FeatureReader({}, [ 
    29                 {'name': 'foo'}, 
    30                 {'name': 'bar'} 
     32                {'name': 'a'}, 
     33                {'name': 'b', 'mapping': 'b_mapped'}, 
     34                {'name': 'c', 'mapping': 'c_mapped.obj'} 
    3135            ]); 
    3236            features = [ 
    3337                new OpenLayers.Feature.Vector(null, { 
    34                     'foo': 'foo_0', 
    35                     'bar': 'bar_0' 
     38                    'a': 'a_value', 
     39                    'b_mapped': 'b_value', 
     40                    'c_mapped': {'obj': 'c_value'} 
    3641                }), 
    3742                new OpenLayers.Feature.Vector() 
     
    4146            features[1].fid = 2; 
    4247            features[1].state = OpenLayers.State.DELETE; 
    43             // 8 tests 
     48            // 10 tests 
    4449            info = reader.readRecords(features); 
    4550            records = info.records; 
    4651            t.eq(info.totalRecords, 2, 'readRecords returns correct number of records'); 
    47             t.eq(records[0].get('foo'), 'foo_0', 'readRecords correctly set feature properties in record'); 
     52            t.eq(records[0].get('a'), 'a_value', 'readRecords correctly set feature properties in record'); 
     53            t.eq(records[0].get('b'), 'b_value', 'readRecords correctly set mapped feature properties in record'); 
     54            t.eq(records[0].get('c'), 'c_value', 'readRecords correctly set complex mapped feature properties in record'); 
    4855            t.eq(records[0].get('fid'), 1, 'readRecords correctly set feature fid in record'); 
    4956            t.eq(records[0].get('state'), OpenLayers.State.INSERT, 'readRecords correctly set feature state in record');