1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- /*global define*/
- define([
- '../Core/defaultValue',
- '../Core/defined'
- ], function(
- defaultValue,
- defined) {
- "use strict";
- function createProperty(name, privateName, subscriptionName, configurable) {
- return {
- configurable : configurable,
- get : function() {
- return this[privateName];
- },
- set : function(value) {
- var oldValue = this[privateName];
- var subscription = this[subscriptionName];
- if (defined(subscription)) {
- subscription();
- this[subscriptionName] = undefined;
- }
- if (oldValue !== value) {
- this[privateName] = value;
- this._definitionChanged.raiseEvent(this, name, value, oldValue);
- }
- if (defined(value) && defined(value.definitionChanged)) {
- this[subscriptionName] = value.definitionChanged.addEventListener(function() {
- this._definitionChanged.raiseEvent(this, name, value, value);
- }, this);
- }
- }
- };
- }
- /**
- * Used to consistently define all DataSources graphics objects.
- * This is broken into two functions because the Chrome profiler does a better
- * job of optimizing lookups if it notices that the string is constant throughout the function.
- * @private
- */
- function createPropertyDescriptor(name, configurable) {
- return createProperty(name, '_' + name, '_' + name + 'Subscription', defaultValue(configurable, false));
- }
- return createPropertyDescriptor;
- });
|