Fixed issue with nested observables when null is given as property value.

This commit is contained in:
Nedyalko Nikolov
2016-08-30 12:37:06 +03:00
parent 501c357fca
commit cb9d974fba
2 changed files with 20 additions and 13 deletions

View File

@ -534,4 +534,11 @@ export function test_NestedObservablesWithObservableArrayShouldNotCrash() {
secondProp: someObservableArray
});
TKUnit.assert(testObservable !== undefined);
}
export function test_NestedObservableWithNullShouldNotCrash() {
let testObservable = observable.fromObjectRecursive({
someProperty: null
});
TKUnit.assert(testObservable !== undefined);
}

View File

@ -51,9 +51,9 @@ export class Observable implements definition.Observable {
private _observers = {};
constructor(json?: any) {
if (json) {
addPropertiesFromJSON(this, json);
constructor(source?: any) {
if (source) {
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;
observable._map = new Map<string, Object>();
for (var prop in json) {
if (json.hasOwnProperty(prop)) {
for (let prop in source) {
if (source.hasOwnProperty(prop)) {
if (isRecursive) {
if (!Array.isArray(json[prop]) && typeof json[prop] === 'object' && types.getClass(json[prop]) !== 'ObservableArray') {
json[prop] = fromObjectRecursive(json[prop]);
if (!Array.isArray(source[prop]) && source[prop] && typeof source[prop] === 'object' && types.getClass(source[prop]) !== 'ObservableArray') {
source[prop] = fromObjectRecursive(source[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();
addPropertiesFromJSON(observable, json, false);
addPropertiesFromObject(observable, source, false);
return observable;
}
export function fromObjectRecursive(json: any): Observable {
export function fromObjectRecursive(source: any): Observable {
let observable = new Observable();
addPropertiesFromJSON(observable, json, true);
addPropertiesFromObject(observable, source, true);
return observable;
}