From a122d854d0a0b51bb699f89f39ca3c38a3f76be6 Mon Sep 17 00:00:00 2001 From: Nedyalko Nikolov Date: Mon, 8 Jun 2015 09:27:59 +0300 Subject: [PATCH] Fixed issue with updating nested properties via binding. --- apps/tests/ui/bindable-tests.ts | 32 ++++++++++++++++++++++++++++++++ ui/core/bindable.ts | 2 +- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/apps/tests/ui/bindable-tests.ts b/apps/tests/ui/bindable-tests.ts index 137fcf057..0cc4354c2 100644 --- a/apps/tests/ui/bindable-tests.ts +++ b/apps/tests/ui/bindable-tests.ts @@ -541,4 +541,36 @@ export function test_BindingToDictionaryAtAppLevel() { } helper.buildUIAndRunTest(createLabel(), testFunc); +} + +export function test_UpdatingNestedPropertyViaBinding() { + var expectedValue1 = "Alabala"; + var expectedValue2 = "Tralala"; + var viewModel = new observable.Observable(); + var parentViewModel = new observable.Observable(); + viewModel.set("parentView", parentViewModel); + parentViewModel.set("name", expectedValue1); + + var testElement: bindable.Bindable = new bindable.Bindable(); + + testElement.bind({ + sourceProperty: "parentView.name", + targetProperty: "targetName", + twoWay: true + }, viewModel); + + var testElement2: bindable.Bindable = new bindable.Bindable(); + + testElement2.bind({ + sourceProperty: "parentView.name", + targetProperty: "targetProperty", + twoWay: true + }, viewModel); + + TKUnit.assertEqual(testElement.get("targetName"), expectedValue1); + + testElement.set("targetName", expectedValue2); + + TKUnit.assertEqual(parentViewModel.get("name"), expectedValue2); + TKUnit.assertEqual(testElement2.get("targetProperty"), expectedValue2); } \ No newline at end of file diff --git a/ui/core/bindable.ts b/ui/core/bindable.ts index a5065671a..7d08a58ea 100644 --- a/ui/core/bindable.ts +++ b/ui/core/bindable.ts @@ -261,7 +261,7 @@ export class Binding { else { this.updateTarget(expressionValue); } - } else if (data.propertyName === this.options.sourceProperty) { + } else if (data.propertyName === this.sourceOptions.property) { this.updateTarget(data.value); } }