Cache event types and changed method names
This commit is contained in:
+39
-3
@@ -67,6 +67,24 @@ ol.Object.create = function(arg) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {Object.<string, string>}
|
||||||
|
*/
|
||||||
|
ol.Object.changedEventTypeCache_ = {};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} key Key.
|
||||||
|
* @private
|
||||||
|
* @return {string} Changed name.
|
||||||
|
*/
|
||||||
|
ol.Object.getChangedEventType_ = function(key) {
|
||||||
|
return ol.Object.changedEventTypeCache_[key] ||
|
||||||
|
(ol.Object.changedEventTypeCache_[key] = key.toLowerCase() + '_changed');
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {Object.<string, string>}
|
* @type {Object.<string, string>}
|
||||||
@@ -85,6 +103,24 @@ ol.Object.getGetterName_ = function(key) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {Object.<string, string>}
|
||||||
|
*/
|
||||||
|
ol.Object.changedMethodNameCache_ = {};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} key String.
|
||||||
|
* @private
|
||||||
|
* @return {string} Changed method name.
|
||||||
|
*/
|
||||||
|
ol.Object.getChangedMethodName_ = function(key) {
|
||||||
|
return ol.Object.changedMethodNameCache_[key] ||
|
||||||
|
(ol.Object.changedMethodNameCache_[key] = key + '_changed');
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {Object.<string, string>}
|
* @type {Object.<string, string>}
|
||||||
@@ -133,7 +169,7 @@ ol.Object.prototype.bindTo =
|
|||||||
function(key, target, opt_targetKey, opt_noNotify) {
|
function(key, target, opt_targetKey, opt_noNotify) {
|
||||||
var targetKey = goog.isDef(opt_targetKey) ? opt_targetKey : key;
|
var targetKey = goog.isDef(opt_targetKey) ? opt_targetKey : key;
|
||||||
this.unbind(key);
|
this.unbind(key);
|
||||||
var eventType = targetKey.toLowerCase() + '_changed';
|
var eventType = ol.Object.getChangedEventType_(targetKey);
|
||||||
var listeners = ol.Object.getListeners(this);
|
var listeners = ol.Object.getListeners(this);
|
||||||
listeners[key] = goog.events.listen(target, eventType, function() {
|
listeners[key] = goog.events.listen(target, eventType, function() {
|
||||||
this.notifyInternal_(key);
|
this.notifyInternal_(key);
|
||||||
@@ -197,13 +233,13 @@ ol.Object.prototype.notify = function(key) {
|
|||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.Object.prototype.notifyInternal_ = function(key) {
|
ol.Object.prototype.notifyInternal_ = function(key) {
|
||||||
var changedMethodName = key + '_changed';
|
var changedMethodName = ol.Object.getChangedMethodName_(key);
|
||||||
if (this[changedMethodName]) {
|
if (this[changedMethodName]) {
|
||||||
this[changedMethodName]();
|
this[changedMethodName]();
|
||||||
} else {
|
} else {
|
||||||
this.changed(key);
|
this.changed(key);
|
||||||
}
|
}
|
||||||
var eventType = key.toLowerCase() + '_changed';
|
var eventType = ol.Object.getChangedEventType_(key);
|
||||||
this.dispatchEvent(eventType);
|
this.dispatchEvent(eventType);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -454,3 +454,29 @@ function testCreateWithOptions() {
|
|||||||
var obj = new ol.Object({k: 1});
|
var obj = new ol.Object({k: 1});
|
||||||
assertEquals(1, obj.get('k'));
|
assertEquals(1, obj.get('k'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function testEventTypeCaseSensitivity() {
|
||||||
|
var obj = new ol.Object();
|
||||||
|
var lowercaseChangedMethodCalled = false;
|
||||||
|
obj.k_changed = function() {
|
||||||
|
lowercaseChangedMethodCalled = true;
|
||||||
|
};
|
||||||
|
var uppercaseChangedMethodCalled = false;
|
||||||
|
obj.K_changed = function() {
|
||||||
|
uppercaseChangedMethodCalled = true;
|
||||||
|
};
|
||||||
|
var lowercaseEventDispatched = false;
|
||||||
|
goog.events.listen(obj, 'k_changed', function() {
|
||||||
|
lowercaseEventDispatched = true;
|
||||||
|
});
|
||||||
|
var uppercaseEventDispatched = false;
|
||||||
|
goog.events.listen(obj, 'K_changed', function() {
|
||||||
|
uppercaseEventDispatched = true;
|
||||||
|
});
|
||||||
|
obj.set('K', 1);
|
||||||
|
assertTrue(lowercaseEventDispatched);
|
||||||
|
assertFalse(uppercaseEventDispatched);
|
||||||
|
assertFalse(lowercaseChangedMethodCalled);
|
||||||
|
assertTrue(uppercaseChangedMethodCalled);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user