2017-01-30 77 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"> 
相關問題