diff --git a/lib/OpenLayers/Protocol/Script.js b/lib/OpenLayers/Protocol/Script.js index b298845586..62f7840bb4 100644 --- a/lib/OpenLayers/Protocol/Script.js +++ b/lib/OpenLayers/Protocol/Script.js @@ -54,20 +54,12 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, { callback: null, /** - * APIProperty: scope - * {Object} Optional ``this`` object for the callback. Read-only, set - * through the options passed to the constructor. + * APIProperty: callbackTemplate + * {String} Template for creating a unique callback function name + * for the registry. Should include ${id}. + * Default is "OpenLayers.Protocol.Script.registry[${id}]". */ - scope: null, - - /** - * APIProperty: format - * {} Format for parsing features. Default is an - * format. If an alternative is provided, - * the format's read method must take an object and return an array - * of features. - */ - format: null, + callbackTemplate: "OpenLayers.Protocol.Script.registry[${id}]", /** * APIProperty: callbackKey @@ -88,6 +80,22 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, { */ callbackPrefix: "", + /** + * APIProperty: scope + * {Object} Optional ``this`` object for the callback. Read-only, set + * through the options passed to the constructor. + */ + scope: null, + + /** + * APIProperty: format + * {} Format for parsing features. Default is an + * format. If an alternative is provided, + * the format's read method must take an object and return an array + * of features. + */ + format: null, + /** * Property: pendingRequests * {Object} References all pending requests. Property names are script @@ -212,7 +220,7 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, { */ createRequest: function(url, params, callback) { var id = OpenLayers.Protocol.Script.register(callback); - var name = "OpenLayers.Protocol.Script.registry[" + id + "]"; + var name = OpenLayers.String.format(this.callbackTemplate, {id: id}); params = OpenLayers.Util.extend({}, params); params[this.callbackKey] = this.callbackPrefix + name; url = OpenLayers.Util.urlAppend( @@ -333,7 +341,7 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, { (function() { var o = OpenLayers.Protocol.Script; var counter = 0; - o.registry = []; + o.registry = {}; /** * Function: OpenLayers.Protocol.Script.register @@ -345,12 +353,11 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, { * that is the JSON returned by the service. * * Returns: - * {Number} An identifier for retreiving the registered callback. + * {Number} An identifier for retrieving the registered callback. */ o.register = function(callback) { - var id = ++counter; + var id = "c"+(++counter); o.registry[id] = function() { - o.unregister(id); callback.apply(this, arguments); }; return id; diff --git a/tests/Protocol/Script.html b/tests/Protocol/Script.html index a676e61821..ee8ac89018 100644 --- a/tests/Protocol/Script.html +++ b/tests/Protocol/Script.html @@ -135,7 +135,7 @@ } function test_createRequest(t) { - t.plan(3); + t.plan(4); var protocol = new OpenLayers.Protocol.Script({ callbackKey: 'cb_key', callbackPrefix: 'cb_prefix:' @@ -155,7 +155,13 @@ t.eq(script.id, 'OpenLayers_Protocol_Script_bar', 'created script has a correct id'); + protocol.callbackTemplate = "OpenLayers.Protocol.Script.registry.${id}"; + script = protocol.createRequest('http://bar_url/', {'k': 'bar_param'}, 'bar_callback'); + t.eq(script.src, 'http://bar_url/?k=bar_param&cb_key=cb_prefix%3AOpenLayers.Protocol.Script.registry.bar', + 'created script has a correct url with different template'); + OpenLayers.Protocol.Script.register = _register; + } function test_destroyRequest(t) {