Skip to content

Commit cb9d974

Browse files
author
Nedyalko Nikolov
committed
Fixed issue with nested observables when null is given as property value.
1 parent 501c357 commit cb9d974

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

tests/app/data/observable-tests.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,4 +534,11 @@ export function test_NestedObservablesWithObservableArrayShouldNotCrash() {
534534
secondProp: someObservableArray
535535
});
536536
TKUnit.assert(testObservable !== undefined);
537+
}
538+
539+
export function test_NestedObservableWithNullShouldNotCrash() {
540+
let testObservable = observable.fromObjectRecursive({
541+
someProperty: null
542+
});
543+
TKUnit.assert(testObservable !== undefined);
537544
}

tns-core-modules/data/observable/observable.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ export class Observable implements definition.Observable {
5151

5252
private _observers = {};
5353

54-
constructor(json?: any) {
55-
if (json) {
56-
addPropertiesFromJSON(this, json);
54+
constructor(source?: any) {
55+
if (source) {
56+
addPropertiesFromObject(this, source);
5757
}
5858
}
5959

@@ -249,30 +249,30 @@ export class Observable implements definition.Observable {
249249
}
250250
}
251251

252-
function addPropertiesFromJSON(observable: Observable, json: any, recursive?: boolean) {
252+
function addPropertiesFromObject(observable: Observable, source: any, recursive?: boolean) {
253253
let isRecursive = recursive || false;
254254
observable._map = new Map<string, Object>();
255-
for (var prop in json) {
256-
if (json.hasOwnProperty(prop)) {
255+
for (let prop in source) {
256+
if (source.hasOwnProperty(prop)) {
257257
if (isRecursive) {
258-
if (!Array.isArray(json[prop]) && typeof json[prop] === 'object' && types.getClass(json[prop]) !== 'ObservableArray') {
259-
json[prop] = fromObjectRecursive(json[prop]);
258+
if (!Array.isArray(source[prop]) && source[prop] && typeof source[prop] === 'object' && types.getClass(source[prop]) !== 'ObservableArray') {
259+
source[prop] = fromObjectRecursive(source[prop]);
260260
}
261261
}
262262
observable._defineNewProperty(prop);
263-
observable.set(prop, json[prop]);
263+
observable.set(prop, source[prop]);
264264
}
265265
}
266266
}
267267

268-
export function fromObject(json: any): Observable {
268+
export function fromObject(source: any): Observable {
269269
let observable = new Observable();
270-
addPropertiesFromJSON(observable, json, false);
270+
addPropertiesFromObject(observable, source, false);
271271
return observable;
272272
}
273273

274-
export function fromObjectRecursive(json: any): Observable {
274+
export function fromObjectRecursive(source: any): Observable {
275275
let observable = new Observable();
276-
addPropertiesFromJSON(observable, json, true);
276+
addPropertiesFromObject(observable, source, true);
277277
return observable;
278278
}

0 commit comments

Comments
 (0)