Change Protocol/Script registry to object

This commit is contained in:
Peter Robins
2012-02-09 10:40:58 +00:00
parent e7eae00246
commit f08119b01e
+25 -18
View File
@@ -54,20 +54,12 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
callback: null, callback: null,
/** /**
* APIProperty: scope * APIProperty: callbackTemplate
* {Object} Optional ``this`` object for the callback. Read-only, set * {String} Template for creating a unique callback function name
* through the options passed to the constructor. * for the registry. Should include ${id}.
* Default is "OpenLayers.Protocol.Script.registry[${id}]".
*/ */
scope: null, callbackTemplate: "OpenLayers.Protocol.Script.registry[${id}]",
/**
* APIProperty: format
* {<OpenLayers.Format>} Format for parsing features. Default is an
* <OpenLayers.Format.GeoJSON> format. If an alternative is provided,
* the format's read method must take an object and return an array
* of features.
*/
format: null,
/** /**
* APIProperty: callbackKey * APIProperty: callbackKey
@@ -88,6 +80,22 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
*/ */
callbackPrefix: "", callbackPrefix: "",
/**
* APIProperty: scope
* {Object} Optional ``this`` object for the callback. Read-only, set
* through the options passed to the constructor.
*/
scope: null,
/**
* APIProperty: format
* {<OpenLayers.Format>} Format for parsing features. Default is an
* <OpenLayers.Format.GeoJSON> 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 * Property: pendingRequests
* {Object} References all pending requests. Property names are script * {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) { createRequest: function(url, params, callback) {
var id = OpenLayers.Protocol.Script.register(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 = OpenLayers.Util.extend({}, params);
params[this.callbackKey] = this.callbackPrefix + name; params[this.callbackKey] = this.callbackPrefix + name;
url = OpenLayers.Util.urlAppend( url = OpenLayers.Util.urlAppend(
@@ -333,7 +341,7 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
(function() { (function() {
var o = OpenLayers.Protocol.Script; var o = OpenLayers.Protocol.Script;
var counter = 0; var counter = 0;
o.registry = []; o.registry = {};
/** /**
* Function: OpenLayers.Protocol.Script.register * Function: OpenLayers.Protocol.Script.register
@@ -345,12 +353,11 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
* that is the JSON returned by the service. * that is the JSON returned by the service.
* *
* Returns: * Returns:
* {Number} An identifier for retreiving the registered callback. * {Number} An identifier for retrieving the registered callback.
*/ */
o.register = function(callback) { o.register = function(callback) {
var id = ++counter; var id = "c"+(++counter);
o.registry[id] = function() { o.registry[id] = function() {
o.unregister(id);
callback.apply(this, arguments); callback.apply(this, arguments);
}; };
return id; return id;