如何通过框架从 NativeScript 模式开启器获取上下文?

Posted

技术标签:

【中文标题】如何通过框架从 NativeScript 模式开启器获取上下文?【英文标题】:How to get context from NativeScript modal opener through frame? 【发布时间】:2019-09-03 06:16:28 【问题描述】:

我无法让 showModal 通过框架将上下文传递到默认页面。此外,在加载模式时,showingModally 似乎不会触发(我猜来自showingModally 的args 应该传递上下文?)。

我已经尝试了自定义操作栏下https://docs.nativescript.org/ui/modal-view 上提供的示例,因为我需要在框架内加载模式。模态打开和关闭正常,但在模态 XML 中显示Modally 似乎没有运行。

home/home-page.js

const modalView = "home/modal-root";

function openModal(args) 
  console.log('Opens modal');
  const mainpage = args.object.page;
  const context = "some context";
  mainpage.showModal(modalView, context, () => 
    console.log('Modal closed');
  , true);

exports.openModal = openModal;

主页/主页.xml

<Page xmlns="http://www.nativescript.org/tns.xsd">
    <Page.actionBar>
        <ActionBar title="Modal view Navigation" />
    </Page.actionBar>

    <GridLayout rows="auto, *">

        <Button text="Open modal" tap="openModal" textWrap="true" />

    </GridLayout>
</Page>

home/modal-root.xml

<Frame defaultPage="home/modal-view-page" />

home/modal-view-page.js

function onShowingModally(args) 
    console.log("onShowingModally");

exports.onShowingModally = onShowingModally;

function onCloseModal(args) 
    args.object.closeModal();

exports.onCloseModal = onCloseModal;

home/modal-view-page.xml

<Page backgroundColor="green" showingModally="onShowingModally">
    <Page.actionBar>
        <ActionBar backgroundColor="red" title="Modal view" icon="">
        </ActionBar>
    </Page.actionBar>
    <StackLayout backgroundColor="lightGreen">
        <Label text="Modal view with ActionBar" style="text-align:center;" textWrap="true" />
        <Button text="Close Modal" tap="onCloseModal" />
    </StackLayout>
</Page>

我已将示例添加到 https://play.nativescript.org/?template=play-js&id=lFxTi4&v=9 带有控制台日志记录。

控制台在打开时显示“打开模式”,在关闭时按预期显示“模式关闭”(来自 home/home-page.js),但“onShowingModally”(home/modal-view-page.js)从未在控制台中显示.

【问题讨论】:

【参考方案1】:

我认为文档需要修复。当您以模态方式显示Frame 时,将在Frame 上而不是在其中的页面上调用该事件。如果您显示的是简单视图而不是 Frame,则应在视图上调用事件,基本上是模式的根视图,在您的示例中是 Frame

Updated Playground

【讨论】:

以上是关于如何通过框架从 NativeScript 模式开启器获取上下文?的主要内容,如果未能解决你的问题,请参考以下文章

Nativescript-Vue 超时后关闭模式

Nativescript Vue(移动应用程序) - 如何将模式列表视图中的选定项目数据传递回主应用程序?

使用 javascript 访问 nativescript 磁力计数据

NativeScript for Android App 中的 Kiosk 模式

Nativescript 6.1.1 应用程序在 --release 模式下崩溃,在调试中工作

如何在 NativeScript 中隐藏 ScrollView 的滚动条?