Cache serializers on the context

This commit is contained in:
Bart van den Eijnden
2014-03-05 13:05:31 +01:00
parent d7f40c11e8
commit ba2d35fc57
+13 -7
View File
@@ -1434,25 +1434,31 @@ ol.format.GML.writeFeature_ = function(node, feature, objectStack) {
goog.asserts.assert(goog.isObject(context)); goog.asserts.assert(goog.isObject(context));
var featureNS = goog.object.get(context, 'featureNS'); var featureNS = goog.object.get(context, 'featureNS');
var geometryName = feature.getGeometryName(); var geometryName = feature.getGeometryName();
var serializers = {}; if (!goog.isDef(context.serializers)) {
serializers[featureNS] = {}; context.serializers = {};
context.serializers[featureNS] = {};
}
var properties = feature.getProperties(); var properties = feature.getProperties();
var keys = [], values = []; var keys = [], values = [];
for (var key in properties) { for (var key in properties) {
keys.push(key); keys.push(key);
values.push(properties[key]); values.push(properties[key]);
if (key == geometryName) { if (key == geometryName) {
serializers[featureNS][key] = ol.xml.makeChildAppender( if (!(key in context.serializers[featureNS])) {
ol.format.GML.writeGeometry_); context.serializers[featureNS][key] = ol.xml.makeChildAppender(
ol.format.GML.writeGeometry_);
}
} else { } else {
serializers[featureNS][key] = ol.xml.makeChildAppender( if (!(key in context.serializers[featureNS])) {
ol.format.XSD.writeStringTextNode); context.serializers[featureNS][key] = ol.xml.makeChildAppender(
ol.format.XSD.writeStringTextNode);
}
} }
} }
var item = goog.object.clone(context); var item = goog.object.clone(context);
goog.object.set(item, 'node', node); goog.object.set(item, 'node', node);
ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */ ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */
(item), serializers, (item), context.serializers,
ol.xml.OBJECT_PROPERTY_NODE_FACTORY, ol.xml.OBJECT_PROPERTY_NODE_FACTORY,
values, values,
objectStack, keys); objectStack, keys);