NativeScript - 使用另一个 UI 元素打开 NativeScript DropDown 小部件
NativeScript - Open NativeScript DropDown widget with Another UI Element
我是 Nativescript 的新手,所以请原谅我的菜鸟问题。
我想让我的下拉菜单有更多网络浏览器的感觉,所以我使用了 PeterStaev's
NativeScript DropDown widget 与网格布局。并设计它的样式。
图片:
XML:
<GridLayout columns="*,auto" class="drop-down-menu" tap="{{ openDropDown }}">
<dd:DropDown items="{{ items }}" selectedIndex="{{ selectedIndex }}" col="0" class="drop-down" />
<Label text="" 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;
}
我想要 GridLayout
上的 openDropDown
函数打开下拉小部件。
也就是说,整个 GridLayout
区域应该能够打开下拉菜单,包括字体图标。
我真的很感激任何帮助代码来完成这个。
或者更优雅的解决方案。
nativescript-drop-down 插件附带打开下拉菜单的方法,可在自述文件中找到:https://github.com/PeterStaev/NativeScript-Drop-Down#methods
所以您需要的是在您的方法 openDropDown
中获取对下拉列表的引用。我会为下拉 UI 组件分配一个 ID,在方法中获取下拉,然后调用 .open()
;
这将打开下拉菜单。
为了使下面的示例正常工作,我假设您将 Page
的实例设置为名为 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();
}
为了让它工作,我必须使用以下 html
<GridLayout class="dd_container" columns="auto, *" (tap)="openDD($event)">
<DropDown id="ddstates"
[class]="cssClassState"
[items]="ddstates"
[(ngModel)]="selectedIndexState"
[hint]="hintstate"
(selectedIndexChanged)="onchange($event)"
(opened)="onopen()"
(closed)="onclose()"
row="0"
col="0">
</DropDown>
</GridLayout>
我必须添加 id 属性而不仅仅是 #ddstates
openDD() 函数包含:
let dropdown = <DropDown>this.page.getViewById('ddstates');
dropdown.open();
页面值在构造函数中声明为
private page: Page
我是 Nativescript 的新手,所以请原谅我的菜鸟问题。 我想让我的下拉菜单有更多网络浏览器的感觉,所以我使用了 PeterStaev's NativeScript DropDown widget 与网格布局。并设计它的样式。
图片:
XML:
<GridLayout columns="*,auto" class="drop-down-menu" tap="{{ openDropDown }}">
<dd:DropDown items="{{ items }}" selectedIndex="{{ selectedIndex }}" col="0" class="drop-down" />
<Label text="" 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;
}
我想要 GridLayout
上的 openDropDown
函数打开下拉小部件。
也就是说,整个 GridLayout
区域应该能够打开下拉菜单,包括字体图标。
我真的很感激任何帮助代码来完成这个。
或者更优雅的解决方案。
nativescript-drop-down 插件附带打开下拉菜单的方法,可在自述文件中找到:https://github.com/PeterStaev/NativeScript-Drop-Down#methods
所以您需要的是在您的方法 openDropDown
中获取对下拉列表的引用。我会为下拉 UI 组件分配一个 ID,在方法中获取下拉,然后调用 .open()
;
这将打开下拉菜单。
为了使下面的示例正常工作,我假设您将 Page
的实例设置为名为 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();
}
为了让它工作,我必须使用以下 html
<GridLayout class="dd_container" columns="auto, *" (tap)="openDD($event)">
<DropDown id="ddstates"
[class]="cssClassState"
[items]="ddstates"
[(ngModel)]="selectedIndexState"
[hint]="hintstate"
(selectedIndexChanged)="onchange($event)"
(opened)="onopen()"
(closed)="onclose()"
row="0"
col="0">
</DropDown>
</GridLayout>
我必须添加 id 属性而不仅仅是 #ddstates
openDD() 函数包含:
let dropdown = <DropDown>this.page.getViewById('ddstates');
dropdown.open();
页面值在构造函数中声明为
private page: Page