[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