2017-01-30 74 views
1

我在实现共享SideDrawer时遇到了问题。我下面这篇文章https://www.nativescript.org/blog/a-deep-dive-into-telerik-ui-for-nativescripts-sidedrawerNativescript RadSideDrawer undefined

首页XML:

<Page 
    xmlns="http://schemas.nativescript.org/tns.xsd" 
    xmlns:sd="nativescript-telerik-ui/sidedrawer" loaded="pageLoaded"> 
    <Page.actionBar> 
    <ActionBar class="action-bar" title="Manu"> 
     <android> 
     <NavigationButton icon="res://ic_menu" tap="toggleDrawer" /> 
     </android> 
     <ios> 
     <ActionItem icon="res://ic_menu" ios.position="left" tap="toggleDrawer" /> 
     </ios> 
    </ActionBar> 
    </Page.actionBar> 
    <sd:RadSideDrawer id="sideDrawer"> 
    <sd:RadSideDrawer.drawerContent 
     xmlns:Drawer="Views/SideDrawerView"> 
     <Drawer:SideDrawerView /> 
    </sd:RadSideDrawer.drawerContent> 
    </sd:RadSideDrawer> 
    <StackLayout> 
    <Label text="{{ sync }}" /> 
    </StackLayout> 
</Page> 

主要页面的代码隐藏:

import { EventData } from 'data/observable'; 
import { Page } from 'ui/page'; 
import { MainViewModel } from '../../ViewModels/MainViewModel'; 

let frameModule = require("ui/frame"); 
let view = require("ui/core/view"); 
let page: Page; 

export function pageLoaded(args: EventData) { 
    page = <Page>args.object; 
    page.bindingContext = new MainViewModel();  
} 

export function toggleDrawer() { 
    let drawer: any = view.getViewById(page, "sideDrawer"); 
    drawer.toggleDrawerState(); 
}; 

SideDrawer XML:

<StackLayout class="sidedrawer-left" loaded="drawerViewLoaded"> 
    <StackLayout class="sidedrawer-header"> 
     <Label text="Hello RadSideDrawer!" class="sidedrawer-header-brand" /> 
    </StackLayout> 
    <StackLayout class="sidedrawer-content"> 
     <Label text="QrScanner" class="sidedrawer-list-item-text" tap="qrScan" /> 
     <Label text="New Item" class="sidedrawer-list-item-text" tap="nItem" /> 
     <Label text="Edit Item" class="sidedrawer-list-item-text" tap="eItem" /> 
     <Label text="Users" class="sidedrawer-list-item-text" tap="openUsers" /> 
     <Label text="Map" class="sidedrawer-list-item-text" tap="map" /> 
    </StackLayout> 
</StackLayout> 

所以,当我真正挖掘和呼叫toggleDrawer功能

export function toggleDrawer() { 
    let drawer: any = view.getViewById(page, "sideDrawer"); 
    drawer.toggleDrawerState(); 
}; 

它说抽屉是未定义的。什么可能是错的?

回答

1

试试这个方法:),你必须点击事件,你可以进去toggleDrawer敲击事件数据,并从args得到窃听对象的page从这里您可以访问sideDrawer控制或使用frameModuletopmost()功能

export function toggleDrawer (args: EventData) { 
    //this way 
    let page = <Page>(<any>args.object).page; 
    //or this way 
    let page = frameModule.topmost(); 
    //at last get drawer content at page 
    let drawer: any = page.getViewById("sideDrawer"); 
    drawer.toggleDrawerState(); 
}; 
+0

谢谢,我解决了这个问题。阅读下面的评论。 – Xoyce

+0

@Xoyce哪个评论?或在哪里? –

+0

http://stackoverflow.com/a/41936602/6188082 – Xoyce

0

我通过在页面元素中声明自定义组件来解决问题,而不是sd:RadSideDrawer.drawerContent。

<Page 
    xmlns="http://schemas.nativescript.org/tns.xsd" 
    xmlns:sd="nativescript-telerik-ui/sidedrawer" 
    xmlns:Drawer="Views/SideDrawerView" loaded="pageLoaded"> 
相关问题