2016-10-28 25 views
1

Я действительно новичок в Nativescript, поэтому простите меня за вопрос о нобе. Я хотел, чтобы в браузере появлялся еще один веб-браузер, поэтому я использовал PeterStaev NativeScript DropDown widget с GridLayout. И стилизовал его.NativeScript - Открыть виджет NativeScript DropDown с другим элементом пользовательского интерфейса

Изображение:

enter image description here

XML:

<GridLayout columns="*,auto" class="drop-down-menu" tap="{{ openDropDown }}"> 
    <dd:DropDown items="{{ items }}" selectedIndex="{{ selectedIndex }}" col="0" class="drop-down" /> 
    <Label text="&#xf078;" textWrap="false" col="1" class="font-awesome" /> 
</GridLayout> 

мой взгляд-модель файл до сих пор:

... 
import { DropDown } from 'nativescript-drop-down'; 

export class RegisterViewModel extends Observable { 
    ... 
    public openDropDown() { 
     console.log('I was tapped’); //this works 
    } 
} 

мой код фоновым найти файл (.ts), так далеко:

... 
import { RegisterViewModel } from '../../viewmodels/register/register-view-model'; 

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

Я хочу функцию openDropDown на GridLayout, чтобы открыть виджет выпадающего списка. То есть вся область GridLayout должна иметь возможность открыть раскрывающееся меню, включая значок шрифта. Я бы очень признателен за любую помощь с кодом для этого. Или более элегантное решение.

ответ

2

nativescript-выпадающий плагин поставляется с методом, чтобы открыть раскрывающийся, здесь в README: https://github.com/PeterStaev/NativeScript-Drop-Down#methods

Так что вам нужно, чтобы получить ссылку на раскрывающемся меню в методе openDropDown. Я бы присвоил идентификатор выпадающему компоненту пользовательского интерфейса, получив раскрывающийся список в методе, а затем позвонил .open(); Это откроет раскрывающийся список.

Для примера ниже, чтобы работать, я предполагаю, что у вас есть экземпляр Page, установленный на переменную с именем страница. Есть и другие способы получить компонент, но это работает.

public openDropDown(args: EventData) { 
    console.log('I was tapped’); //this works 
    let page = <Page>args.object; 
    let dropdown = <DropDown>page.getViewById('yourDropDid'); 
    dropdown.open(); 
} 
+1

Awesome. Большое спасибо Брэду, это сработало. Я только отредактировал ваш ответ, чтобы показать точный код, который я использовал. – Sam

+1

Не думайте, что 'args.object' в этом случае будет' '', но скорее это 'GridLayout', который вы все равно можете вызвать' getViewById() ', но тип не соответствует этому. Рад, что это сработало, хотя :) –

+0

как я уже сказал, я новичок. :) пожалуйста, продолжайте и отредактируйте код с более правильной версией, для дальнейшего использования. – Sam