FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Merge pull request #1042 from NativeScript/special-props-binding · NativeScript/NativeScript@5dd4ea5 · GitHub

Commit 5dd4ea5

Browse files
Vladimir Enchev
committed
Merge pull request #1042 from NativeScript/special-props-binding
binding to special properties fixed
2 parents ae64b90 + 363a441 commit 5dd4ea5

2 files changed

Lines changed: 23 additions & 6 deletions

File tree

‎apps/tests/xml-declaration/xml-declaration-tests.ts‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,17 @@ export function test_parse_ShouldParseSubProperties() {
455455
TKUnit.assert(sw.visibility === "collapsed", "Expected result: collapsed; Actual result: " + sw.visibility + "; type: " + typeof (sw.visibility));
456456
};
457457

458+
export function test_parse_ShouldParseBindingToSpecialProperty() {
459+
var classProp = "MyClass";
460+
var p = <Page>builder.parse("<Page><Label class='{{ myProp }}' /></Page>");
461+
var obj = new observable.Observable();
462+
obj.set("myProp", classProp);
463+
p.bindingContext = obj;
464+
465+
TKUnit.assertEqual(p.content.className, classProp);
466+
TKUnit.assertEqual(p.content._cssClasses.length, 1);
467+
};
468+
458469
export function test_parse_ShouldParseBindingsWithCommaInsideSingleQuote() {
459470
var expected = "Hi,test"
460471
var bindingString = "{{ 'Hi,' + myProp }}";

‎ui/core/bindable.ts‎

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import trace = require("trace");
77
import polymerExpressions = require("js-libs/polymer-expressions");
88
import bindingBuilder = require("../builder/binding-builder");
99
import viewModule = require("ui/core/view");
10+
import {getSpecialPropertySetter} from "ui/builder/special-properties";
1011

1112
//late import
1213
var _appModule = null;
@@ -22,7 +23,7 @@ var bindingContextProperty = new dependencyObservable.Property(
2223
"bindingContext",
2324
"Bindable",
2425
new dependencyObservable.PropertyMetadata(undefined, dependencyObservable.PropertyMetadataSettings.Inheritable, onBindingContextChanged)
25-
);
26+
);
2627

2728
function onBindingContextChanged(data: dependencyObservable.PropertyChangeData) {
2829
var bindable = <Bindable>data.object;
@@ -211,8 +212,8 @@ export class Binding {
211212
// then split properties either on '.' or '['
212213
var parentsMatches = property.match(bindingBuilder.parentsRegex);
213214
result = property.replace(bindingBuilder.parentsRegex, "parentsMatch")
214-
.replace(/\]/g, "")
215-
.split(/\.|\[/);
215+
.replace(/\]/g, "")
216+
.split(/\.|\[/);
216217

217218
var i;
218219
var resultLength = result.length;
@@ -591,10 +592,15 @@ export class Binding {
591592
optionsInstance.off(options.property, null, optionsInstance.bindingContext);
592593
optionsInstance.on(options.property, value, optionsInstance.bindingContext);
593594
} else {
594-
if (optionsInstance instanceof observable.Observable) {
595-
optionsInstance.set(options.property, value);
595+
let specialSetter = getSpecialPropertySetter(options.property);
596+
if (specialSetter) {
597+
specialSetter(optionsInstance, value);
596598
} else {
597-
optionsInstance[options.property] = value;
599+
if (optionsInstance instanceof observable.Observable) {
600+
optionsInstance.set(options.property, value);
601+
} else {
602+
optionsInstance[options.property] = value;
603+
}
598604
}
599605
}
600606
}

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL