我正在尝试创建here所描述的自定义组件,以便在我的应用程序的不同位置重用操作栏及其逻辑 . 这是我设置组件的内容:
/components/header/header.xml
<ActionBar title="Title" class="{{ 'mode' == dark ? 'bg-dark' : 'bg-white' }}" loaded="loaded">
</ActionBar>
/components/header/header.ts
exports.loaded = (args) => {
let page = <Page> args.object;
let pageObservable = new Observable({
'mode' : page.get('mode')
});
page.bindingContext = pageObservable;
}
然后我尝试使用这样调用它的组件:
some_view.xml
<Page
xmlns="http://schemas.nativescript.org/tns.xsd"
xmlns:header="components/header">
<header:header mode="dark"/>
<StackLayout>..</StackLayout>
...
</Page>
但是,导航到`some-view.xml'我收到以下错误:
Calling js method onCreateView failed
TypeError: Cannot read property frame of 'undefined'
File "data...../ui/action-bar/action-bar.js" line: 146
难道我做错了什么?您是否成功创建了基于ActionBar的自定义组件?
1 回答
也许问题是你试图在
/components/header/header.ts
文件的loaded
方法中获取Page实例 .args
将返回您对ActionBar
的引用,而不是Page
. 另一方面,在使用TypeScript时,事件应该像这样定义export function loaded(args){...}
. 在上面给出的代码中,您使用的是JavaScript语法 . 我正在附加示例代码,其中显示了如何创建自定义组件 .component/action-bar/action-bar.xml
component/action-bar/action-bar.ts
main-page.xml
main-page.ts