tns-core-modules
Version:
Telerik NativeScript Core Modules
95 lines (94 loc) • 3.44 kB
JavaScript
var bindable = require("ui/core/bindable");
var dependencyObservable = require("ui/core/dependency-observable");
var types = require("utils/types");
var observable = require("data/observable");
var PropertyMetadata = (function (_super) {
__extends(PropertyMetadata, _super);
function PropertyMetadata(defaultValue, options, onChanged, onValidateValue, onSetNativeValue) {
_super.call(this, defaultValue, options, onChanged, onValidateValue);
this._onSetNativeValue = onSetNativeValue;
}
Object.defineProperty(PropertyMetadata.prototype, "onSetNativeValue", {
get: function () {
return this._onSetNativeValue;
},
set: function (value) {
this._onSetNativeValue = value;
},
enumerable: true,
configurable: true
});
return PropertyMetadata;
}(dependencyObservable.PropertyMetadata));
exports.PropertyMetadata = PropertyMetadata;
var ProxyObject = (function (_super) {
__extends(ProxyObject, _super);
function ProxyObject() {
_super.apply(this, arguments);
this._updatingJSPropertiesDict = {};
}
Object.defineProperty(ProxyObject.prototype, "android", {
get: function () {
return undefined;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ProxyObject.prototype, "ios", {
get: function () {
return undefined;
},
enumerable: true,
configurable: true
});
ProxyObject.prototype._onPropertyChanged = function (property, oldValue, newValue) {
_super.prototype._onPropertyChanged.call(this, property, oldValue, newValue);
this._trySetNativeValue(property, oldValue, newValue);
};
ProxyObject.prototype._onPropertyChangedFromNative = function (property, newValue) {
if (this._updatingJSPropertiesDict[property.name]) {
return;
}
this._updatingJSPropertiesDict[property.name] = true;
this._setValue(property, newValue);
delete this._updatingJSPropertiesDict[property.name];
};
ProxyObject.prototype._syncNativeProperties = function () {
var that = this;
var eachPropertyCallback = function (property) {
that._trySetNativeValue(property);
return true;
};
this._eachSetProperty(eachPropertyCallback);
};
ProxyObject.prototype._canApplyNativeProperty = function () {
return false;
};
ProxyObject.prototype._trySetNativeValue = function (property, oldValue, newValue) {
if (this._updatingJSPropertiesDict[property.name]) {
return;
}
if (!this._canApplyNativeProperty()) {
return;
}
var metadata = property.metadata;
if (!(metadata instanceof PropertyMetadata)) {
return;
}
var proxyMetadata = metadata;
if (proxyMetadata.onSetNativeValue) {
if (types.isUndefined(newValue)) {
newValue = this._getValue(property);
}
proxyMetadata.onSetNativeValue({
object: this,
property: property,
eventName: observable.Observable.propertyChangeEvent,
newValue: newValue,
oldValue: oldValue
});
}
};
return ProxyObject;
}(bindable.Bindable));
exports.ProxyObject = ProxyObject;