mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
A lot of re-factoring + bug fix for navigation events
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import definition = require("controls-page");
|
||||
import {View} from "ui/core/view";
|
||||
import {Page} from "ui/page";
|
||||
import {Page, NavigatedData} from "ui/page";
|
||||
import {topmost as topmostFrame, NavigationTransition, Frame} from "ui/frame";
|
||||
import {Orientation, AnimationCurve} from "ui/enums";
|
||||
import {StackLayout} from "ui/layouts/stack-layout";
|
||||
@@ -39,25 +39,25 @@ export class NavPage extends Page implements definition.ControlsPage {
|
||||
|
||||
var that = this;
|
||||
that.on(View.loadedEvent, (args) => {
|
||||
console.log(`${args.object}.loadedEvent`);
|
||||
//if (topmostFrame().android) {
|
||||
// topmostFrame().android.cachePagesOnNavigate = true;
|
||||
//}
|
||||
console.log(`Loaded ${args.object}`);
|
||||
if (topmostFrame().android) {
|
||||
topmostFrame().android.cachePagesOnNavigate = true;
|
||||
}
|
||||
});
|
||||
that.on(View.unloadedEvent, (args) => {
|
||||
console.log(`${args.object}.unloadedEvent`);
|
||||
console.log(`Unloaded ${args.object}`);
|
||||
});
|
||||
that.on(Page.navigatingFromEvent, (args) => {
|
||||
console.log(`${args.object}.navigatingFromEvent`);
|
||||
that.on(Page.navigatingFromEvent, (args: NavigatedData) => {
|
||||
console.log(`NavigatING FROM ${args.object}, isBackNavigation: ${args.isBackNavigation}`);
|
||||
});
|
||||
that.on(Page.navigatedFromEvent, (args) => {
|
||||
console.log(`${args.object}.navigatedFromEvent`);
|
||||
that.on(Page.navigatedFromEvent, (args: NavigatedData) => {
|
||||
console.log(`NaviagatED FROM ${args.object}, isBackNavigation: ${args.isBackNavigation}`);
|
||||
});
|
||||
that.on(Page.navigatingToEvent, (args) => {
|
||||
console.log(`${args.object}.navigatingToEvent`);
|
||||
that.on(Page.navigatingToEvent, (args: NavigatedData) => {
|
||||
console.log(`NavigatING TO ${args.object}, isBackNavigation: ${args.isBackNavigation}`);
|
||||
});
|
||||
that.on(Page.navigatedToEvent, (args) => {
|
||||
console.log(`${args.object}.navigatedToEvent`);
|
||||
that.on(Page.navigatedToEvent, (args: NavigatedData) => {
|
||||
console.log(`NavigatED TO ${args.object}, isBackNavigation: ${args.isBackNavigation}`);
|
||||
(<any>topmostFrame())._printFrameBackStack();
|
||||
if (topmostFrame().android) {
|
||||
(<any>topmostFrame())._printNativeBackStack();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import * as TKUnit from "../TKUnit";
|
||||
import {Page} from "ui/page";
|
||||
import {Page, NavigatedData} from "ui/page";
|
||||
import {topmost as topmostFrame, NavigationTransition} from "ui/frame";
|
||||
import {Color} from "color";
|
||||
|
||||
@@ -174,3 +174,65 @@ export var test_ClearHistoryWithTransitionDoesNotBreakNavigation = function () {
|
||||
// Clean up
|
||||
topmost.transition = undefined;
|
||||
}
|
||||
|
||||
function _test_NavigationEvents(transition?: NavigationTransition) {
|
||||
let argsToString = (args: NavigatedData) => {
|
||||
return `${(<Page>args.object).id} ${args.eventName} ${(args.isBackNavigation ? "back" : "forward") }`
|
||||
};
|
||||
|
||||
let topmost = topmostFrame();
|
||||
let mainTestPage = topmost.currentPage;
|
||||
let originalMainPageId = mainTestPage.id;
|
||||
mainTestPage.id = "main-page";
|
||||
let actualMainPageEvents = new Array<string>();
|
||||
mainTestPage.on(Page.navigatingFromEvent, (args: NavigatedData) => { actualMainPageEvents.push(argsToString(args)); });
|
||||
mainTestPage.on(Page.navigatedFromEvent, (args: NavigatedData) => { actualMainPageEvents.push(argsToString(args)); });
|
||||
mainTestPage.on(Page.navigatingToEvent, (args: NavigatedData) => { actualMainPageEvents.push(argsToString(args)); });
|
||||
mainTestPage.on(Page.navigatedToEvent, (args: NavigatedData) => { actualMainPageEvents.push(argsToString(args)); });
|
||||
|
||||
let actualSecondPageEvents = new Array<string>();
|
||||
let secondPageFactory = function (): Page {
|
||||
var secondPage = new Page();
|
||||
secondPage.id = "second-page"
|
||||
secondPage.on(Page.navigatingFromEvent, (args: NavigatedData) => { actualSecondPageEvents.push(argsToString(args)); });
|
||||
secondPage.on(Page.navigatedFromEvent, (args: NavigatedData) => { actualSecondPageEvents.push(argsToString(args)); });
|
||||
secondPage.on(Page.navigatingToEvent, (args: NavigatedData) => { actualSecondPageEvents.push(argsToString(args)); });
|
||||
secondPage.on(Page.navigatedToEvent, (args: NavigatedData) => { actualSecondPageEvents.push(argsToString(args)); });
|
||||
secondPage.style.backgroundColor = new Color(255, Math.round(Math.random() * 255), Math.round(Math.random() * 255), Math.round(Math.random() * 255));
|
||||
return secondPage;
|
||||
};
|
||||
|
||||
// Go to other page
|
||||
topmost.navigate({ create: secondPageFactory, transition: transition });
|
||||
TKUnit.waitUntilReady(() => { return topmost.currentPage !== mainTestPage; });
|
||||
|
||||
// Go back to main
|
||||
topmost.goBack();
|
||||
TKUnit.waitUntilReady(() => { return topmost.currentPage === mainTestPage; });
|
||||
mainTestPage.id = originalMainPageId;
|
||||
|
||||
let expectedMainPageEvents = [
|
||||
"main-page navigatingFrom forward",
|
||||
"main-page navigatedFrom forward",
|
||||
"main-page navigatingTo back",
|
||||
"main-page navigatedTo back"
|
||||
];
|
||||
TKUnit.arrayAssert(actualMainPageEvents, expectedMainPageEvents, "Actual main-page events are different from expected.");
|
||||
|
||||
let expectedSecondPageEvents = [
|
||||
"second-page navigatingTo forward",
|
||||
"second-page navigatedTo forward",
|
||||
"second-page navigatingFrom back",
|
||||
"second-page navigatedFrom back"
|
||||
];
|
||||
TKUnit.arrayAssert(actualSecondPageEvents, expectedSecondPageEvents, "Actual second-page events are different from expected.");
|
||||
|
||||
}
|
||||
|
||||
export var test_NavigationEvents = function () {
|
||||
_test_NavigationEvents();
|
||||
}
|
||||
|
||||
export var test_NavigationEvents_WithTransition = function () {
|
||||
_test_NavigationEvents({ name: "slide" });
|
||||
}
|
||||
Reference in New Issue
Block a user