mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 11:42:04 +08:00
Merge pull request #2469 from NativeScript/nnikolov/NestedObservables
Creating observables from a nested json.
This commit is contained in:
@ -1262,3 +1262,45 @@ export function test_only_Bindable_BindingContext_Null_DoesNotThrow() {
|
||||
obj.bindingContext = new observable.Observable({ a: "b" });
|
||||
obj.bindingContext = null;
|
||||
}
|
||||
|
||||
export function test_Observable_from_nested_json_binds_correctly() {
|
||||
let expectedValue = "Test";
|
||||
var model = new observable.Observable({
|
||||
"firstObject": {
|
||||
"secondObject": {
|
||||
"dummyProperty": "text"
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var obj = new bindable.Bindable();
|
||||
obj.bind({
|
||||
sourceProperty: "firstObject.secondObject.dummyProperty",
|
||||
targetProperty: "test"
|
||||
}, model);
|
||||
|
||||
model.get("firstObject").get("secondObject").set("dummyProperty", expectedValue);
|
||||
|
||||
TKUnit.assertEqual(obj.get("test"), expectedValue);
|
||||
}
|
||||
|
||||
export function test_Observable_from_nested_json_binds_correctly_when_upper_object_is_changed() {
|
||||
let expectedValue = "Test";
|
||||
var model = new observable.Observable({
|
||||
"firstObject": {
|
||||
"secondObject": {
|
||||
"dummyProperty": "text"
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var obj = new bindable.Bindable();
|
||||
obj.bind({
|
||||
sourceProperty: "firstObject.secondObject.dummyProperty",
|
||||
targetProperty: "test"
|
||||
}, model);
|
||||
|
||||
model.get("firstObject").set("secondObject", new observable.Observable({"dummyProperty": expectedValue}));
|
||||
|
||||
TKUnit.assertEqual(obj.get("test"), expectedValue);
|
||||
}
|
@ -56,6 +56,9 @@ export class Observable implements definition.Observable {
|
||||
this._map = new Map<string, Object>();
|
||||
for (var prop in json) {
|
||||
if (json.hasOwnProperty(prop)) {
|
||||
if (!Array.isArray(json[prop]) && typeof json[prop] === 'object') {
|
||||
json[prop] = new Observable(json[prop]);
|
||||
}
|
||||
this._defineNewProperty(prop);
|
||||
this.set(prop, json[prop]);
|
||||
}
|
||||
|
Reference in New Issue
Block a user