Merge pull request #2872 from fredj/remove_beforechange_event

Remove the beforepropertychange event from ol.Object
This commit is contained in:
Frédéric Junod
2014-10-24 21:03:31 +02:00
2 changed files with 0 additions and 188 deletions

View File

@@ -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.<string, goog.events.Key>}
* @private
*/
this.beforeChangeListeners_ = {};
/**
* @private
* @type {Object.<string, goog.events.Key>}
@@ -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];
}
};

View File

@@ -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() {