add events to strategy.save: start, success, fail. r=elemoine, (Closes #1902)

(It is possible Save may need extension for additional events; this should be
a new ticket.)


git-svn-id: http://svn.openlayers.org/trunk/openlayers@9645 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
crschmidt
2009-09-08 13:06:15 +00:00
parent 19057eedd8
commit 9970eaff16
+31
View File
@@ -18,6 +18,28 @@
*/ */
OpenLayers.Strategy.Save = OpenLayers.Class(OpenLayers.Strategy, { OpenLayers.Strategy.Save = OpenLayers.Class(OpenLayers.Strategy, {
/**
* Constant: EVENT_TYPES
* {Array(String)} Supported application event types. Register a listener
* for a particular event with the following syntax:
* (code)
* protocol.events.register(type, obj, listener);
* (end)
*
* - *start* Triggered before saving
* - *success* Triggered after a successful transaction
* - *fail* Triggered after a failed transaction
*
*/
EVENT_TYPES: ["start", "success", "fail"],
/**
* Property: events
* {<OpenLayers.Events>} Events instance for triggering this protocol
* events.
*/
events: null,
/** /**
* APIProperty: auto * APIProperty: auto
* {Boolean | Number} Auto-save. Default is false. If true, features will be * {Boolean | Number} Auto-save. Default is false. If true, features will be
@@ -43,6 +65,7 @@ OpenLayers.Strategy.Save = OpenLayers.Class(OpenLayers.Strategy, {
*/ */
initialize: function(options) { initialize: function(options) {
OpenLayers.Strategy.prototype.initialize.apply(this, [options]); OpenLayers.Strategy.prototype.initialize.apply(this, [options]);
this.events = new OpenLayers.Events(this, null, this.EVENT_TYPES);
}, },
/** /**
@@ -131,6 +154,7 @@ OpenLayers.Strategy.Save = OpenLayers.Class(OpenLayers.Strategy, {
if(!features) { if(!features) {
features = this.layer.features; features = this.layer.features;
} }
this.events.triggerEvent("start", {features:features});
var remote = this.layer.projection; var remote = this.layer.projection;
var local = this.layer.map.getProjectionObject(); var local = this.layer.map.getProjectionObject();
if(!local.equals(remote)) { if(!local.equals(remote)) {
@@ -162,6 +186,7 @@ OpenLayers.Strategy.Save = OpenLayers.Class(OpenLayers.Strategy, {
* response - {<OpenLayers.Protocol.Response>} A response object. * response - {<OpenLayers.Protocol.Response>} A response object.
*/ */
onCommit: function(response) { onCommit: function(response) {
var evt = {"response": response};
if(response.success()) { if(response.success()) {
var features = response.reqFeatures; var features = response.reqFeatures;
// deal with inserts, updates, and deletes // deal with inserts, updates, and deletes
@@ -184,9 +209,15 @@ OpenLayers.Strategy.Save = OpenLayers.Class(OpenLayers.Strategy, {
feature.state = null; feature.state = null;
} }
} }
if(destroys.length > 0) { if(destroys.length > 0) {
this.layer.destroyFeatures(destroys); this.layer.destroyFeatures(destroys);
} }
this.events.triggerEvent("success", evt);
} else {
this.events.triggerEvent("fail", evt);
} }
}, },