diff --git a/src/ol/object.js b/src/ol/object.js index c9be3264eb..60ecaa5c62 100644 --- a/src/ol/object.js +++ b/src/ol/object.js @@ -1,6 +1,3 @@ -// FIXME propertychange events include the oldValue so remove the -// beforepropertychange event type. - /** * An implementation of Google Maps' MVCObject. * @see https://developers.google.com/maps/articles/mvcfun @@ -22,12 +19,6 @@ goog.require('ol.Observable'); * @enum {string} */ ol.ObjectEventType = { - /** - * Triggered before a property is changed. - * @event ol.ObjectEvent#beforepropertychange - * @api - */ - BEFOREPROPERTYCHANGE: 'beforepropertychange', /** * Triggered when a property is changed. * @event ol.ObjectEvent#propertychange @@ -198,13 +189,6 @@ ol.Object = function(opt_values) { */ this.accessors_ = {}; - /** - * Lookup of beforechange listener keys. - * @type {Object.} - * @private - */ - this.beforeChangeListeners_ = {}; - /** * @private * @type {Object.} @@ -362,12 +346,6 @@ ol.Object.prototype.bindTo = function(key, target, opt_targetKey) { this.notify(key, e.oldValue); }, undefined, this); - // listen for beforechange events and relay if key matches - this.beforeChangeListeners_[key] = goog.events.listen(target, - ol.ObjectEventType.BEFOREPROPERTYCHANGE, - this.createBeforeChangeListener_(key, targetKey), - undefined, this); - var accessor = new ol.ObjectAccessor(this, target, key, targetKey); this.accessors_[key] = accessor; this.notify(key, this.values_[key]); @@ -375,30 +353,6 @@ ol.Object.prototype.bindTo = function(key, target, opt_targetKey) { }; -/** - * Create a listener for beforechange events on a target object. This listener - * will relay events on this object if the event key matches the provided target - * key. - * @param {string} key The key on this object whose value will be changing. - * @param {string} targetKey The key on the target object. - * @return {function(this: ol.Object, ol.ObjectEvent)} Listener. - * @private - */ -ol.Object.prototype.createBeforeChangeListener_ = function(key, targetKey) { - /** - * Conditionally relay beforechange events if event key matches target key. - * @param {ol.ObjectEvent} event The beforechange event from the target. - * @this {ol.Object} - */ - return function(event) { - if (event.key === targetKey) { - this.dispatchEvent(new ol.ObjectEvent( - ol.ObjectEventType.BEFOREPROPERTYCHANGE, key, undefined)); - } - }; -}; - - /** * Gets a value. * @param {string} key Key name. @@ -489,8 +443,6 @@ ol.Object.prototype.notify = function(key, oldValue) { * @api */ ol.Object.prototype.set = function(key, value) { - this.dispatchEvent(new ol.ObjectEvent( - ol.ObjectEventType.BEFOREPROPERTYCHANGE, key, undefined)); var accessors = this.accessors_; if (accessors.hasOwnProperty(key)) { var accessor = accessors[key]; @@ -533,13 +485,6 @@ ol.Object.prototype.unbind = function(key) { delete this.accessors_[key]; this.values_[key] = value; } - - // unregister any beforechange listener - var listenerKey = this.beforeChangeListeners_[key]; - if (listenerKey) { - goog.events.unlistenByKey(listenerKey); - delete this.beforeChangeListeners_[key]; - } }; diff --git a/test/spec/ol/object.test.js b/test/spec/ol/object.test.js index 67b52b4cdf..e8890aace3 100644 --- a/test/spec/ol/object.test.js +++ b/test/spec/ol/object.test.js @@ -179,20 +179,6 @@ describe('ol.Object', function() { expect(event.key).to.be('k'); }); - it('dispatches beforechange events to object', function() { - o.set('k', 1); - - var oldValue; - var beforeListener = sinon.spy(function(event) { - oldValue = o2.get(event.key); - }); - o.on(ol.ObjectEventType.BEFOREPROPERTYCHANGE, beforeListener); - - o.set('k', 2); - expect(beforeListener.calledOnce).to.be(true); - expect(oldValue).to.be(1); - }); - it('dispatches events to bound object', function() { o.set('k', 1); expect(listener3).to.be.called(); @@ -215,73 +201,6 @@ describe('ol.Object', function() { expect(event.key).to.be('k'); }); - it('dispatches beforechange before changing bound objects', function() { - o2.set('k', 1); - - var oldValue; - var beforeListener = sinon.spy(function(event) { - oldValue = o2.get(event.key); - }); - o.on(ol.ObjectEventType.BEFOREPROPERTYCHANGE, beforeListener); - - o2.set('k', 2); - expect(beforeListener.calledOnce).to.be(true); - var args = beforeListener.firstCall.args; - expect(args).to.have.length(1); - var event = args[0]; - expect(event.key).to.be('k'); - - expect(oldValue).to.be(1); - }); - - it('relays beforechange events from bound objects', function() { - var target = new ol.Object({ - foo: 'original value' - }); - var object = new ol.Object(); - object.bindTo('foo', target); - - var oldValue; - var beforeListener = sinon.spy(function(event) { - oldValue = object.get(event.key); - }); - object.on(ol.ObjectEventType.BEFOREPROPERTYCHANGE, beforeListener); - - target.set('foo', 'new value'); - expect(beforeListener.calledOnce).to.be(true); - var args = beforeListener.firstCall.args; - expect(args).to.have.length(1); - var event = args[0]; - expect(event.key).to.be('foo'); - - expect(oldValue).to.be('original value'); - expect(object.get('foo')).to.be('new value'); - }); - - it('relays beforechange events when bound with a new key', function() { - var target = new ol.Object({ - foo: 'original value' - }); - var object = new ol.Object(); - object.bindTo('bar', target, 'foo'); - - var oldValue; - var beforeListener = sinon.spy(function(event) { - oldValue = object.get(event.key); - }); - object.on(ol.ObjectEventType.BEFOREPROPERTYCHANGE, beforeListener); - - target.set('foo', 'new value'); - expect(beforeListener.calledOnce).to.be(true); - var args = beforeListener.firstCall.args; - expect(args).to.have.length(1); - var event = args[0]; - expect(event.key).to.be('bar'); - - expect(oldValue).to.be('original value'); - expect(object.get('bar')).to.be('new value'); - }); - }); describe('bind', function() { @@ -391,58 +310,6 @@ describe('ol.Object', function() { expect(o2.get('k')).to.eql(2); }); - it('stops relaying beforechange events', function() { - var target = new ol.Object({ - foo: 'original value' - }); - var object = new ol.Object(); - object.bindTo('foo', target); - - var listener = sinon.spy(); - object.on(ol.ObjectEventType.BEFOREPROPERTYCHANGE, listener); - - target.set('foo', 'new value'); - expect(listener.calledOnce).to.be(true); - var call = listener.firstCall; - expect(call.args).to.have.length(1); - expect(call.args[0].key).to.be('foo'); - - object.unbind('foo'); - target.set('foo', 'another new value'); - expect(listener.calledOnce).to.be(true); - - expect(object.get('foo')).to.be('new value'); - }); - - it('selectively stops relaying beforechange events', function() { - var target = new ol.Object({ - foo: 'original foo', - bar: 'original bar' - }); - var object = new ol.Object(); - object.bindTo('foo', target); - object.bindTo('bar', target); - - var listener = sinon.spy(); - object.on(ol.ObjectEventType.BEFOREPROPERTYCHANGE, listener); - - target.set('foo', 'new foo'); - expect(listener.calledOnce).to.be(true); - - target.set('bar', 'new bar'); - expect(listener.callCount).to.be(2); - - object.unbind('foo'); - target.set('foo', 'another new foo'); - expect(listener.callCount).to.be(2); - - target.set('bar', 'another new bar'); - expect(listener.callCount).to.be(3); - var lastCall = listener.getCall(2); - expect(lastCall.args).to.have.length(1); - expect(lastCall.args[0].key).to.be('bar'); - }); - }); describe('unbindAll', function() {