mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 20:11:24 +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 = new observable.Observable({ a: "b" });
|
||||||
obj.bindingContext = null;
|
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>();
|
this._map = new Map<string, Object>();
|
||||||
for (var prop in json) {
|
for (var prop in json) {
|
||||||
if (json.hasOwnProperty(prop)) {
|
if (json.hasOwnProperty(prop)) {
|
||||||
|
if (!Array.isArray(json[prop]) && typeof json[prop] === 'object') {
|
||||||
|
json[prop] = new Observable(json[prop]);
|
||||||
|
}
|
||||||
this._defineNewProperty(prop);
|
this._defineNewProperty(prop);
|
||||||
this.set(prop, json[prop]);
|
this.set(prop, json[prop]);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user