Merge pull request #2049 from akagr/feature/add-attributes-2048

Expose configurable attributes property when loading components
This commit is contained in:
Vladimir Enchev
2016-05-11 10:10:38 +03:00
10 changed files with 38 additions and 15 deletions

View File

@ -133,6 +133,26 @@ export function test_loadWithOptionsFromTNSPath() {
TKUnit.assert(v instanceof Label, "Expected result: Label; Actual result: " + v + ";");
};
export function test_loadWithAttributes() {
var lText = "Nativescript rocks";
var lWrap = true;
var lColor = "#FF0000"; // red
var v = builder.load({
path: "tns_modules/ui/label",
name: "Label",
attributes: {
text: lText,
textWrap: lWrap,
style: "color: " + lColor + ";"
}
});
TKUnit.assertEqual(v["text"], lText, "Expected result: true; Actual result: " + v + ";");
TKUnit.assertEqual(v["textWrap"], true, "Expected result: true; Actual result: " + v + ";");
helper.assertViewColor(v, lColor);
};
export function test_parse_ShouldNotCrashWithoutExports() {
var file = fs.File.fromPath(fs.path.join(__dirname, "mainPage.xml"));
var text = file.readTextSync();

View File

@ -209,7 +209,7 @@ module.exports = {
},
shell: {
collectAndroidLog: {
command: "./expect.exp " + "'adb logcat' " + localCfg.outFile,
command: "./expect.exp " + "'adb logcat *:D' " + localCfg.outFile,
options: {
execOptions: {
maxBuffer: Infinity

View File

@ -9,6 +9,7 @@
export interface LoadOptions {
path: string;
name: string;
attributes?: any;
exports?: any;
page?: page.Page;
}

View File

@ -115,7 +115,7 @@ export function load(pathOrOptions: string | LoadOptions, context?: any): View {
if (!context) {
if (!isString(pathOrOptions)) {
let options = <LoadOptions>pathOrOptions;
componentModule = loadCustomComponent(options.path, options.name, undefined, options.exports, options.page);
componentModule = loadCustomComponent(options.path, options.name, options.attributes, options.exports, options.page);
} else {
let path = <string>pathOrOptions;
componentModule = loadInternal(path);

View File

@ -2,7 +2,7 @@ declare module "ui/builder/component-builder" {
import view = require("ui/core/view");
export function getComponentModule(elementName: string, namespace: string, attributes: Object, exports: Object): ComponentModule;
export function setPropertyValue(instance: view.View, instanceModuleExports: Object, pageExports: Object, propertyName: string, propertyValue: string) : void;
export function setPropertyValue(instance: view.View, instanceModuleExports: Object, pageExports: Object, propertyName: string, propertyValue: any) : void;
export interface ComponentModule {
component: view.View;

View File

@ -154,7 +154,7 @@ export function getComponentModule(elementName: string, namespace: string, attri
return componentModule;
}
export function setPropertyValue(instance: View, instanceModule: Object, exports: Object, propertyName: string, propertyValue: string) {
export function setPropertyValue(instance: View, instanceModule: Object, exports: Object, propertyName: string, propertyValue: any) {
// Note: instanceModule can be null if we are loading custom compnenet with no code-behind.
if (isBinding(propertyValue) && instance.bind) {
@ -193,7 +193,7 @@ function getBindingExpressionFromAttribute(value: string): string {
return value.replace("{{", "").replace("}}", "").trim();
}
function isBinding(value: string): boolean {
function isBinding(value: any): boolean {
var isBinding;
if (isString(value)) {

View File

@ -1,7 +1,7 @@
declare module "ui/builder/special-properties" {
import view = require("ui/core/view");
export type PropertySetter = (instance: view.View, propertyValue: string) => void;
export type PropertySetter = (instance: view.View, propertyValue: any) => void;
export function registerSpecialProperty(name: string, setter: PropertySetter): void;
export function getSpecialPropertySetter(name: string): PropertySetter;
}

View File

@ -1,6 +1,6 @@
import view = require("ui/core/view");
export type PropertySetter = (instance: view.View, propertyValue: string) => void;
export type PropertySetter = (instance: view.View, propertyValue: any) => void;
var specialProperties: Map<string, PropertySetter> = new Map<string, PropertySetter>();

View File

@ -34,10 +34,12 @@ export function escapeRegexSymbols(source: string): string {
return source.replace(escapeRegex, "\\$&");
}
export function convertString(value: string): any {
export function convertString(value: any): any {
var result;
if (value.trim() === "") {
if (!types.isString(value)) {
result = value;
} else if (value.trim() === "") {
result = value;
} else {
// Try to convert value to number.

2
utils/utils.d.ts vendored
View File

@ -240,5 +240,5 @@
* Converts string value to number or boolean.
* @param value The original value.
*/
export function convertString(value: string): any
export function convertString(value: any): any
}