mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 20:11:24 +08:00
Merge pull request #1184 from NativeScript/cankov/context-to-template
Propagate context to template Views
This commit is contained in:
@ -0,0 +1,2 @@
|
||||
// Our unit test will set this function and expect it to be set as a handler on a View in the XML.
|
||||
export var test: (args: any) => void;
|
@ -0,0 +1,8 @@
|
||||
<Page xmlns="http://schemas.nativescript.org/tns.xsd"
|
||||
xmlns:tc="xml-declaration/template-builder-tests/template-view">
|
||||
<tc:TemplateView id="template-view">
|
||||
<tc:TemplateView.template>
|
||||
<tc:TemplateView text="Click!" test="test" />
|
||||
</tc:TemplateView.template>
|
||||
</tc:TemplateView>
|
||||
</Page>
|
@ -18,6 +18,8 @@ export class TemplateView extends LayoutBase {
|
||||
null
|
||||
)
|
||||
);
|
||||
|
||||
public static testEvent: string = "test";
|
||||
|
||||
get template(): string | Template {
|
||||
return this._getValue(TemplateView.templateProperty);
|
||||
|
@ -880,4 +880,30 @@ export function test_NonExistingElementInTemplateError() {
|
||||
message = e.message;
|
||||
}
|
||||
TKUnit.assertEqual(message.substr(0, expectedErrorStart.length), expectedErrorStart, "Expected load to throw, and the message to start with specific string");
|
||||
}
|
||||
|
||||
export function test_EventInTemplate() {
|
||||
var pageCode = require("./template-builder-tests/event-in-template");
|
||||
|
||||
var notified = false;
|
||||
pageCode.test = (args) => {
|
||||
notified = true;
|
||||
}
|
||||
|
||||
var basePath = "xml-declaration/";
|
||||
var message;
|
||||
var page = builder.load(__dirname + "/template-builder-tests/event-in-template.xml", pageCode);
|
||||
TKUnit.assert(view, "Expected the xml to generate a page");
|
||||
var templateView = <TemplateView>page.getViewById("template-view");
|
||||
TKUnit.assert(templateView, "Expected the page to have a TemplateView with 'temaplte-view' id.");
|
||||
templateView.parseTemplate();
|
||||
TKUnit.assertEqual(templateView.getChildrenCount(), 1, "Expected TemplateView initially to have 1 child.");
|
||||
var childTemplateView = <TemplateView>templateView.getChildAt(0);
|
||||
TKUnit.assert(childTemplateView, "Expected the TemplateView's template to create a child TemplateView.");
|
||||
childTemplateView.notify({
|
||||
eventName: "test",
|
||||
object: childTemplateView
|
||||
});
|
||||
|
||||
TKUnit.assert(notified, "Expected the child to raise the test event.");
|
||||
}
|
@ -319,6 +319,7 @@
|
||||
"apps/tests/xml-declaration/mainPage.ts",
|
||||
"apps/tests/xml-declaration/mymodule/MyControl.ts",
|
||||
"apps/tests/xml-declaration/mymodulewithxml/MyControl.ts",
|
||||
"apps/tests/xml-declaration/template-builder-tests/event-in-template.ts",
|
||||
"apps/tests/xml-declaration/template-builder-tests/template-view.ts",
|
||||
"apps/tests/xml-declaration/xml-declaration-tests.ts",
|
||||
"apps/tests/xml-parser-tests/xml-parser-tests.ts",
|
||||
|
@ -438,7 +438,7 @@ namespace xml2ui {
|
||||
|
||||
if (ComponentParser.isKnownTemplate(name, parent.exports)) {
|
||||
return new TemplateParser(this, {
|
||||
context: parent ? getExports(parent.component) : null, // Passing 'context' won't work if you set "codeFile" on the page
|
||||
context: (parent ? getExports(parent.component) : null) || this.context, // Passing 'context' won't work if you set "codeFile" on the page
|
||||
parent: parent,
|
||||
name: name,
|
||||
elementName: args.elementName,
|
||||
|
Reference in New Issue
Block a user