File tree Expand file tree Collapse file tree 2 files changed +45
-0
lines changed
tns-core-modules/data/observable Expand file tree Collapse file tree 2 files changed +45
-0
lines changed Original file line number Diff line number Diff line change @@ -1261,4 +1261,46 @@ export function test_only_Bindable_BindingContext_Null_DoesNotThrow() {
1261
1261
obj . bind ( options ) ;
1262
1262
obj . bindingContext = new observable . Observable ( { a : "b" } ) ;
1263
1263
obj . bindingContext = null ;
1264
+ }
1265
+
1266
+ export function test_Observable_from_nested_json_binds_correctly ( ) {
1267
+ let expectedValue = "Test" ;
1268
+ var model = new observable . Observable ( {
1269
+ "firstObject" : {
1270
+ "secondObject" : {
1271
+ "dummyProperty" : "text"
1272
+ }
1273
+ }
1274
+ } ) ;
1275
+
1276
+ var obj = new bindable . Bindable ( ) ;
1277
+ obj . bind ( {
1278
+ sourceProperty : "firstObject.secondObject.dummyProperty" ,
1279
+ targetProperty : "test"
1280
+ } , model ) ;
1281
+
1282
+ model . get ( "firstObject" ) . get ( "secondObject" ) . set ( "dummyProperty" , expectedValue ) ;
1283
+
1284
+ TKUnit . assertEqual ( obj . get ( "test" ) , expectedValue ) ;
1285
+ }
1286
+
1287
+ export function test_Observable_from_nested_json_binds_correctly_when_upper_object_is_changed ( ) {
1288
+ let expectedValue = "Test" ;
1289
+ var model = new observable . Observable ( {
1290
+ "firstObject" : {
1291
+ "secondObject" : {
1292
+ "dummyProperty" : "text"
1293
+ }
1294
+ }
1295
+ } ) ;
1296
+
1297
+ var obj = new bindable . Bindable ( ) ;
1298
+ obj . bind ( {
1299
+ sourceProperty : "firstObject.secondObject.dummyProperty" ,
1300
+ targetProperty : "test"
1301
+ } , model ) ;
1302
+
1303
+ model . get ( "firstObject" ) . set ( "secondObject" , new observable . Observable ( { "dummyProperty" : expectedValue } ) ) ;
1304
+
1305
+ TKUnit . assertEqual ( obj . get ( "test" ) , expectedValue ) ;
1264
1306
}
Original file line number Diff line number Diff line change @@ -56,6 +56,9 @@ export class Observable implements definition.Observable {
56
56
this . _map = new Map < string , Object > ( ) ;
57
57
for ( var prop in json ) {
58
58
if ( json . hasOwnProperty ( prop ) ) {
59
+ if ( ! Array . isArray ( json [ prop ] ) && typeof json [ prop ] === 'object' ) {
60
+ json [ prop ] = new Observable ( json [ prop ] ) ;
61
+ }
59
62
this . _defineNewProperty ( prop ) ;
60
63
this . set ( prop , json [ prop ] ) ;
61
64
}
You can’t perform that action at this time.
0 commit comments