mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-17 04:41:36 +08:00
Fixed issue with nested observables when null is given as property value.
This commit is contained in:
@ -534,4 +534,11 @@ export function test_NestedObservablesWithObservableArrayShouldNotCrash() {
|
|||||||
secondProp: someObservableArray
|
secondProp: someObservableArray
|
||||||
});
|
});
|
||||||
TKUnit.assert(testObservable !== undefined);
|
TKUnit.assert(testObservable !== undefined);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function test_NestedObservableWithNullShouldNotCrash() {
|
||||||
|
let testObservable = observable.fromObjectRecursive({
|
||||||
|
someProperty: null
|
||||||
|
});
|
||||||
|
TKUnit.assert(testObservable !== undefined);
|
||||||
}
|
}
|
@ -51,9 +51,9 @@ export class Observable implements definition.Observable {
|
|||||||
|
|
||||||
private _observers = {};
|
private _observers = {};
|
||||||
|
|
||||||
constructor(json?: any) {
|
constructor(source?: any) {
|
||||||
if (json) {
|
if (source) {
|
||||||
addPropertiesFromJSON(this, json);
|
addPropertiesFromObject(this, source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -249,30 +249,30 @@ export class Observable implements definition.Observable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function addPropertiesFromJSON(observable: Observable, json: any, recursive?: boolean) {
|
function addPropertiesFromObject(observable: Observable, source: any, recursive?: boolean) {
|
||||||
let isRecursive = recursive || false;
|
let isRecursive = recursive || false;
|
||||||
observable._map = new Map<string, Object>();
|
observable._map = new Map<string, Object>();
|
||||||
for (var prop in json) {
|
for (let prop in source) {
|
||||||
if (json.hasOwnProperty(prop)) {
|
if (source.hasOwnProperty(prop)) {
|
||||||
if (isRecursive) {
|
if (isRecursive) {
|
||||||
if (!Array.isArray(json[prop]) && typeof json[prop] === 'object' && types.getClass(json[prop]) !== 'ObservableArray') {
|
if (!Array.isArray(source[prop]) && source[prop] && typeof source[prop] === 'object' && types.getClass(source[prop]) !== 'ObservableArray') {
|
||||||
json[prop] = fromObjectRecursive(json[prop]);
|
source[prop] = fromObjectRecursive(source[prop]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
observable._defineNewProperty(prop);
|
observable._defineNewProperty(prop);
|
||||||
observable.set(prop, json[prop]);
|
observable.set(prop, source[prop]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function fromObject(json: any): Observable {
|
export function fromObject(source: any): Observable {
|
||||||
let observable = new Observable();
|
let observable = new Observable();
|
||||||
addPropertiesFromJSON(observable, json, false);
|
addPropertiesFromObject(observable, source, false);
|
||||||
return observable;
|
return observable;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function fromObjectRecursive(json: any): Observable {
|
export function fromObjectRecursive(source: any): Observable {
|
||||||
let observable = new Observable();
|
let observable = new Observable();
|
||||||
addPropertiesFromJSON(observable, json, true);
|
addPropertiesFromObject(observable, source, true);
|
||||||
return observable;
|
return observable;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user