mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
Merge pull request #1357 from NativeScript/cankov/go-back-to-backstack-entry
Frame.goBack can now accept an entry to navigate back to
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import TKUnit = require("./TKUnit");
|
import TKUnit = require("./TKUnit");
|
||||||
import pageModule = require("ui/page");
|
import pageModule = require("ui/page");
|
||||||
import frame = require("ui/frame");
|
import frame = require("ui/frame");
|
||||||
|
import { Page } from "ui/page";
|
||||||
|
|
||||||
export var test_backstackVisible = function() {
|
export var test_backstackVisible = function() {
|
||||||
var pageFactory = function(): pageModule.Page {
|
var pageFactory = function(): pageModule.Page {
|
||||||
@@ -31,6 +32,46 @@ export var test_backstackVisible = function() {
|
|||||||
TKUnit.waitUntilReady(() => { return frame.topmost().currentPage === mainTestPage; });
|
TKUnit.waitUntilReady(() => { return frame.topmost().currentPage === mainTestPage; });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export var test_backToEntry = function() {
|
||||||
|
let page = (tag) => () => {
|
||||||
|
var p = new Page();
|
||||||
|
p["tag"] = tag;
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
let topmost = frame.topmost();
|
||||||
|
let wait = tag => TKUnit.waitUntilReady(() => topmost.currentPage["tag"] === tag, 1);
|
||||||
|
let navigate = tag => {
|
||||||
|
topmost.navigate({ create: page(tag) });
|
||||||
|
wait(tag)
|
||||||
|
}
|
||||||
|
let back = pages => {
|
||||||
|
topmost.goBack(topmost.backStack[topmost.backStack.length - pages]);
|
||||||
|
}
|
||||||
|
let currentPageMustBe = tag => {
|
||||||
|
wait(tag); // TODO: Add a timeout...
|
||||||
|
TKUnit.assert(topmost.currentPage["tag"] === tag, "Expected current page to be " + tag + " it was " + topmost.currentPage["tag"] + " instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
navigate("page1");
|
||||||
|
navigate("page2");
|
||||||
|
navigate("page3");
|
||||||
|
navigate("page4");
|
||||||
|
|
||||||
|
currentPageMustBe("page4");
|
||||||
|
back(2);
|
||||||
|
currentPageMustBe("page2");
|
||||||
|
back(1);
|
||||||
|
currentPageMustBe("page1");
|
||||||
|
navigate("page1.1");
|
||||||
|
navigate("page1.2");
|
||||||
|
currentPageMustBe("page1.2");
|
||||||
|
back(1);
|
||||||
|
currentPageMustBe("page1.1");
|
||||||
|
back(1);
|
||||||
|
currentPageMustBe("page1");
|
||||||
|
back(1);
|
||||||
|
}
|
||||||
|
|
||||||
// Clearing the history messes up the tests app.
|
// Clearing the history messes up the tests app.
|
||||||
export var test_ClearHistory = function () {
|
export var test_ClearHistory = function () {
|
||||||
var pageFactory = function(): pageModule.Page {
|
var pageFactory = function(): pageModule.Page {
|
||||||
|
|||||||
@@ -152,14 +152,27 @@ export class Frame extends CustomLayoutView implements definition.Frame {
|
|||||||
return this._backStack.length > 0;
|
return this._backStack.length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public goBack() {
|
/**
|
||||||
|
* Navigates to the previous entry (if any) in the back stack.
|
||||||
|
* @param to The backstack entry to navigate back to.
|
||||||
|
*/
|
||||||
|
public goBack(backstackEntry?: definition.BackstackEntry) {
|
||||||
trace.write(this._getTraceId() + ".goBack();", trace.categories.Navigation);
|
trace.write(this._getTraceId() + ".goBack();", trace.categories.Navigation);
|
||||||
if (!this.canGoBack()) {
|
if (!this.canGoBack()) {
|
||||||
// TODO: Do we need to throw an error?
|
// TODO: Do we need to throw an error?
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var backstackEntry = this._backStack.pop();
|
if (!backstackEntry) {
|
||||||
|
backstackEntry = this._backStack.pop();
|
||||||
|
} else {
|
||||||
|
let backIndex = this._backStack.indexOf(backstackEntry);
|
||||||
|
if (backIndex < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._backStack.splice(backIndex);
|
||||||
|
}
|
||||||
|
|
||||||
var navigationContext: NavigationContext = {
|
var navigationContext: NavigationContext = {
|
||||||
entry: backstackEntry,
|
entry: backstackEntry,
|
||||||
isBackNavigation: true
|
isBackNavigation: true
|
||||||
|
|||||||
3
ui/frame/frame.d.ts
vendored
3
ui/frame/frame.d.ts
vendored
@@ -19,8 +19,9 @@ declare module "ui/frame" {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Navigates to the previous entry (if any) in the back stack.
|
* Navigates to the previous entry (if any) in the back stack.
|
||||||
|
* @param to The backstack entry to navigate back to.
|
||||||
*/
|
*/
|
||||||
goBack();
|
goBack(to?: BackstackEntry);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the goBack operation is available.
|
* Checks whether the goBack operation is available.
|
||||||
|
|||||||
Reference in New Issue
Block a user