Listen for property changes in layer group

This avoids a future bug when the ol.ObjectEventType.CHANGE value becomes something different than the goog.events.EventType.CHANGE value.
This commit is contained in:
Tim Schaub
2013-12-11 12:23:05 -07:00
parent 1783776976
commit 17e91feb52
2 changed files with 46 additions and 6 deletions

View File

@@ -3,13 +3,13 @@ goog.provide('ol.layer.Group');
goog.require('goog.array');
goog.require('goog.asserts');
goog.require('goog.events');
goog.require('goog.events.EventType');
goog.require('goog.math');
goog.require('goog.object');
goog.require('ol.Collection');
goog.require('ol.CollectionEvent');
goog.require('ol.CollectionEventType');
goog.require('ol.Object');
goog.require('ol.ObjectEventType');
goog.require('ol.layer.Base');
goog.require('ol.source.State');
@@ -104,7 +104,7 @@ ol.layer.Group.prototype.handleLayersChanged_ = function(event) {
for (i = 0, ii = layersArray.length; i < ii; i++) {
layer = layersArray[i];
this.listenerKeys_[goog.getUid(layer).toString()] =
goog.events.listen(layer, goog.events.EventType.CHANGE,
goog.events.listen(layer, ol.ObjectEventType.CHANGE,
this.handleLayerChange_, false, this);
}
}
@@ -120,7 +120,7 @@ ol.layer.Group.prototype.handleLayersChanged_ = function(event) {
ol.layer.Group.prototype.handleLayersAdd_ = function(collectionEvent) {
var layer = /** @type {ol.layer.Base} */ (collectionEvent.getElement());
this.listenerKeys_[goog.getUid(layer).toString()] = goog.events.listen(
layer, goog.events.EventType.CHANGE, this.handleLayerChange_, false,
layer, ol.ObjectEventType.CHANGE, this.handleLayerChange_, false,
this);
this.dispatchChangeEvent();
};

View File

@@ -63,7 +63,7 @@ describe('ol.layer.Group', function() {
});
describe('change event', function() {
describe('generic change event', function() {
var layer, group, listener;
beforeEach(function() {
@@ -84,14 +84,14 @@ describe('ol.layer.Group', function() {
});
it('is dispatched by the group when layer opacity changes', function() {
group.on(ol.ObjectEventType.CHANGE, listener);
group.on(goog.events.EventType.CHANGE, listener);
layer.setOpacity(0.5);
expect(listener.calledOnce).to.be(true);
});
it('is dispatched by the group when layer visibility changes', function() {
group.on(ol.ObjectEventType.CHANGE, listener);
group.on(goog.events.EventType.CHANGE, listener);
layer.setVisible(false);
expect(listener.callCount).to.be(1);
@@ -102,6 +102,45 @@ describe('ol.layer.Group', function() {
});
describe('property change event', function() {
var layer, group, listener;
beforeEach(function() {
layer = new ol.layer.Layer({
source: new ol.source.Source({
projection: 'EPSG:4326'
})
});
group = new ol.layer.Group({
layers: [layer]
});
listener = sinon.spy();
});
afterEach(function() {
goog.dispose(group);
goog.dispose(layer);
});
it('is dispatched by the group when group opacity changes', function() {
group.on(ol.ObjectEventType.CHANGE, listener);
group.setOpacity(0.5);
expect(listener.calledOnce).to.be(true);
});
it('is dispatched by the group when group visibility changes', function() {
group.on(ol.ObjectEventType.CHANGE, listener);
group.setVisible(false);
expect(listener.callCount).to.be(1);
group.setVisible(true);
expect(listener.callCount).to.be(2);
});
});
describe('constructor (options)', function() {
it('accepts options', function() {
@@ -352,6 +391,7 @@ describe('ol.layer.Group', function() {
});
goog.require('goog.dispose');
goog.require('goog.events.EventType');
goog.require('ol.ObjectEventType');
goog.require('ol.layer.Layer');
goog.require('ol.layer.Group');