nativescript - 无法从 NS6 中的自定义组件中捕获事件
问题描述
我正在使用 NS 6.0 核心。在物理 Android 设备上进行测试(尚未在 iOS 上尝试过)。
简而言之,我有嵌套组件,在内部组件中,我想捕获一个自定义事件并将其传递给主机组件。
内部组件(称为 TopBar):
<StackLayout padding="10" orintation="horizontal" loaded="onLoaded">
<Label text="" class="wa" fontSize="24" vertcalAlignment="middle" tap="back" />
</StackLayout>
import { StackLayout } from 'tns-core-modules/ui/layouts/stack-layout';
import { EventData } from 'tns-core-modules/ui/core/view/view';
var stack: StackLayout;
let eventData: EventData = {
eventName: "onBackEvent",
object: stack
}
export function onLoaded(args) {
stack = <StackLayout>args.object;
}
export function back() {
stack.notify(eventData);
}
主机组件
import { Page } from "tns-core-modules/ui/page/page";
import { StackLayout } from "tns-core-modules/ui/layouts/stack-layout/stack-layout";
import { EventData, Observable } from "tns-core-modules/data/observable";
var model: Observable = new Observable();
var page: Page;
export function onLoaded(args: EventData) {
page = <Page>args.object;
var topBar: StackLayout = page.getViewById('topBar');
topBar.on('onBackEvent', () => {
console.log('go back');
});
page.bindingContext = model;
}
<Page xmlns="http://schemas.nativescript.org/tns.xsd" xmlns:tb="components/shared/top-bar/top-bar" loaded="onLoaded" actionBarHidden="true">
<GridLayout rows="*, 75" columns="*">
<StackLayout class="page-content">
<tb:TopBar id="topBar" height="50"></tb:TopBar>
</StackLayout>
</GridLayout>
</Page>
关于我可能遗漏的任何想法?
谢谢
解决方案
{N}自动修剪以 开头的事件名称on
,因此onBackEvent
将被记录为BackEvent
only。所以通知onBackEvent
不会有任何效果。
在我看来,这是有道理的,当我上次检查 Angular 并没有使用支持on
以事件绑定为前缀的事件名称时也是如此。这也可能是他们不得不将其作为标准措施的原因。
推荐阅读
- python - 具有相同“列表”类型的两个列表之间的区别(带和不带撇号'')--python
- python - 对 locals() 的调用是否可能会使内存过载?
- javascript - 在 React 中的 useState 中设置输入值
- python - 指数平滑法预测学生成绩
- python - curl 通过 paramiko 失败并显示 401,手动运行成功
- azure - 通过门户从 azure blob 容器下载多个文件,而不是一次下载一个
- python - Jupyter笔记本和系统python(3.9.0)之间的不同sys.path
- typescript - 如何描述类的返回值?
- firebase - Firebase 云消息传递延迟
- c - 如何遍历链表并仅打印包含特定数据的内容,然后再次运行以打印包含 c 中其他数据的内容?