Merge pull request #4921 from ahocevar/unlisten-earlier-and-bind-to-target
Unlisten before calling listener and bind to target by default
This commit is contained in:
@@ -107,11 +107,12 @@ ol.events.ListenerObjType;
|
|||||||
*/
|
*/
|
||||||
ol.events.bindListener_ = function(listenerObj) {
|
ol.events.bindListener_ = function(listenerObj) {
|
||||||
var boundListener = function(evt) {
|
var boundListener = function(evt) {
|
||||||
var rv = listenerObj.listener.call(listenerObj.bindTo, evt);
|
var listener = listenerObj.listener;
|
||||||
|
var bindTo = listenerObj.bindTo || listenerObj.target;
|
||||||
if (listenerObj.callOnce) {
|
if (listenerObj.callOnce) {
|
||||||
ol.events.unlistenByKey(listenerObj);
|
ol.events.unlistenByKey(listenerObj);
|
||||||
}
|
}
|
||||||
return rv;
|
return listener.call(bindTo, evt);
|
||||||
}
|
}
|
||||||
listenerObj.boundListener = boundListener;
|
listenerObj.boundListener = boundListener;
|
||||||
return boundListener;
|
return boundListener;
|
||||||
|
|||||||
@@ -24,23 +24,32 @@ describe('ol.events', function() {
|
|||||||
boundListener();
|
boundListener();
|
||||||
expect(listenerObj.listener.thisValues[0]).to.equal(listenerObj.bindTo);
|
expect(listenerObj.listener.thisValues[0]).to.equal(listenerObj.bindTo);
|
||||||
});
|
});
|
||||||
it('binds a self-unregistering listener when callOnce is true', function() {
|
it('binds to the target when bindTo is not provided', function() {
|
||||||
var bindTo = {id: 1};
|
|
||||||
var listener = sinon.spy();
|
|
||||||
target.removeEventListener = function() {};
|
|
||||||
var listenerObj = {
|
var listenerObj = {
|
||||||
type: 'foo',
|
listener: sinon.spy(),
|
||||||
target: target,
|
target: {id: 1}
|
||||||
listener: listener,
|
|
||||||
bindTo: bindTo,
|
|
||||||
callOnce: true
|
|
||||||
};
|
};
|
||||||
var boundListener = ol.events.bindListener_(listenerObj);
|
var boundListener = ol.events.bindListener_(listenerObj);
|
||||||
expect(listenerObj.boundListener).to.equal(boundListener);
|
expect(listenerObj.boundListener).to.equal(boundListener);
|
||||||
var spy = sinon.spy(ol.events, 'unlistenByKey');
|
|
||||||
boundListener();
|
boundListener();
|
||||||
expect(listener.thisValues[0]).to.equal(bindTo);
|
expect(listenerObj.listener.thisValues[0]).to.equal(listenerObj.target);
|
||||||
expect(spy.firstCall.args[0]).to.eql(listenerObj);
|
});
|
||||||
|
it('binds a self-unregistering listener when callOnce is true', function() {
|
||||||
|
var bindTo = {id: 1};
|
||||||
|
var listenerObj = {
|
||||||
|
type: 'foo',
|
||||||
|
target: target,
|
||||||
|
bindTo: bindTo,
|
||||||
|
callOnce: true
|
||||||
|
};
|
||||||
|
var unlistenSpy = sinon.spy(ol.events, 'unlistenByKey');
|
||||||
|
listenerObj.listener = function() {
|
||||||
|
expect(this).to.equal(bindTo);
|
||||||
|
expect(unlistenSpy.firstCall.args[0]).to.eql(listenerObj);
|
||||||
|
}
|
||||||
|
var boundListener = ol.events.bindListener_(listenerObj);
|
||||||
|
expect(listenerObj.boundListener).to.equal(boundListener);
|
||||||
|
boundListener();
|
||||||
ol.events.unlistenByKey.restore();
|
ol.events.unlistenByKey.restore();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user