From 36ae896933ee716f723065b908a610c060a2c2d6 Mon Sep 17 00:00:00 2001 From: Rossen Hristov Date: Mon, 18 Jul 2016 13:38:57 +0300 Subject: [PATCH 1/2] Fix: Set the binding context of a page automatically when navigated to. Resolves #731 --- tests/app/ui/layouts/grid-layout-tests.ts | 2 -- tests/app/ui/page/page-tests-common.ts | 25 +++++++++++++++++++++++ tests/package.json | 4 ++-- tns-core-modules/ui/page/page-common.ts | 13 ++++++++++++ 4 files changed, 40 insertions(+), 4 deletions(-) diff --git a/tests/app/ui/layouts/grid-layout-tests.ts b/tests/app/ui/layouts/grid-layout-tests.ts index dc85e7017e..9bc784f375 100644 --- a/tests/app/ui/layouts/grid-layout-tests.ts +++ b/tests/app/ui/layouts/grid-layout-tests.ts @@ -17,13 +17,11 @@ class RemovalTrackingGridLayout extends GridLayout { public removedCols = 0; public _onRowRemoved(itemSpec: ItemSpec, index: number) { - console.log("_onRowRemoved"); this.removedRows++; super._onRowRemoved(itemSpec, index); } public _onColumnRemoved(itemSpec: ItemSpec, index: number) { - console.log("_onColumnRemoved"); this.removedCols++; super._onColumnRemoved(itemSpec, index); } diff --git a/tests/app/ui/page/page-tests-common.ts b/tests/app/ui/page/page-tests-common.ts index d2988b5813..8bc07ebb0a 100644 --- a/tests/app/ui/page/page-tests-common.ts +++ b/tests/app/ui/page/page-tests-common.ts @@ -230,6 +230,31 @@ export function test_NavigateTo_WithContext() { TKUnit.assertNull(testPage.navigationContext, "Navigation context should be cleared on navigating back"); } +//https://github.com/NativeScript/NativeScript/issues/731 +export function test_BindingContext_Becomes_NavigationContext_When_NavigatingTo() { + let currentPage = frameModule.topmost().currentPage; + let testPage: Page; + let bindingContext; + let pageFactory = function (): Page { + testPage = new Page(); + testPage.on(pageModule.Page.navigatingToEvent, function (args: NavigatedData) { + bindingContext = (args.object).bindingContext; + }); + return testPage; + }; + let navEntry = { + create: pageFactory, + context: "This is the navigation context", + animated: false + }; + let topFrame = frameModule.topmost(); + topFrame.navigate(navEntry); + TKUnit.waitUntilReady(() => topFrame.currentPage !== null && topFrame.currentPage !== currentPage && testPage.isLayoutValid); + helper.goBack(); + + TKUnit.assertEqual(bindingContext, navEntry.context, "The Page's bindingContext should be set automatically to the navigation context when navigating to."); +} + export function test_FrameBackStack_WhenNavigatingForwardAndBack() { let testPage: Page; let pageFactory = function () { diff --git a/tests/package.json b/tests/package.json index 17ce53ae68..cca777fa5d 100644 --- a/tests/package.json +++ b/tests/package.json @@ -6,7 +6,7 @@ "nativescript": { "id": "org.nativescript.tests", "tns-ios": { - "version": "2.1.0" + "version": "2.1.1" }, "tns-android": { "version": "2.1.1" @@ -23,4 +23,4 @@ "lazy": "1.0.11", "typescript": "^1.8.10" } -} +} \ No newline at end of file diff --git a/tns-core-modules/ui/page/page-common.ts b/tns-core-modules/ui/page/page-common.ts index 0388a0c4be..be89f004ec 100644 --- a/tns-core-modules/ui/page/page-common.ts +++ b/tns-core-modules/ui/page/page-common.ts @@ -199,8 +199,15 @@ export class Page extends ContentView implements dts.Page { }; } + private _originalBindingContext: any; public onNavigatingTo(context: any, isBackNavigation: boolean) { this._navigationContext = context; + + //https://github.com/NativeScript/NativeScript/issues/731 + if (!isBackNavigation && context && this.bindingContext !== context){ + this._originalBindingContext = this.bindingContext; + this.bindingContext = context; + } this.notify(this.createNavigatedData(Page.navigatingToEvent, isBackNavigation)); } @@ -216,6 +223,12 @@ export class Page extends ContentView implements dts.Page { this.notify(this.createNavigatedData(Page.navigatedFromEvent, isBackNavigation)); this._navigationContext = undefined; + + //https://github.com/NativeScript/NativeScript/issues/731 + if (isBackNavigation && this._originalBindingContext && this.bindingContext !== this._originalBindingContext){ + this.bindingContext = this._originalBindingContext; + this._originalBindingContext = undefined; + } } public showModal(): Page { From 0dcb0c9b36269a1440698744e014c12fffc9ad13 Mon Sep 17 00:00:00 2001 From: Rossen Hristov Date: Mon, 18 Jul 2016 14:24:15 +0300 Subject: [PATCH 2/2] Remove the _originalBindingContext caching --- tns-core-modules/ui/page/page-common.ts | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/tns-core-modules/ui/page/page-common.ts b/tns-core-modules/ui/page/page-common.ts index be89f004ec..e85b228c69 100644 --- a/tns-core-modules/ui/page/page-common.ts +++ b/tns-core-modules/ui/page/page-common.ts @@ -9,6 +9,7 @@ import * as fileSystemModule from "file-system"; import * as frameModule from "ui/frame"; import proxy = require("ui/core/proxy"); import keyframeAnimation = require("ui/animation/keyframe-animation"); +import types = require("utils/types"); let fs: typeof fileSystemModule; function ensureFS() { @@ -199,13 +200,11 @@ export class Page extends ContentView implements dts.Page { }; } - private _originalBindingContext: any; public onNavigatingTo(context: any, isBackNavigation: boolean) { this._navigationContext = context; //https://github.com/NativeScript/NativeScript/issues/731 - if (!isBackNavigation && context && this.bindingContext !== context){ - this._originalBindingContext = this.bindingContext; + if (!isBackNavigation && !types.isNullOrUndefined(context)){ this.bindingContext = context; } this.notify(this.createNavigatedData(Page.navigatingToEvent, isBackNavigation)); @@ -223,12 +222,6 @@ export class Page extends ContentView implements dts.Page { this.notify(this.createNavigatedData(Page.navigatedFromEvent, isBackNavigation)); this._navigationContext = undefined; - - //https://github.com/NativeScript/NativeScript/issues/731 - if (isBackNavigation && this._originalBindingContext && this.bindingContext !== this._originalBindingContext){ - this.bindingContext = this._originalBindingContext; - this._originalBindingContext = undefined; - } } public showModal(): Page {