首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nativescript 7有一个像样的下拉菜单吗?

Nativescript 7有一个像样的下拉菜单吗?
EN

Stack Overflow用户
提问于 2020-10-10 03:48:48
回答 1查看 229关注 0票数 3

我正在寻找一个开源的NS7替代原生脚本-下拉菜单。有谁有什么建议。我正在将我的应用程序移植到NS7上,但是很难找到一个替代它的付费版本的插件。

EN

回答 1

Stack Overflow用户

发布于 2020-12-26 01:05:28

我的解决方法是打开一个包含下拉项的模式,然后在closeCallback函数中接收所选的项,如下所示:

dropdown-modal.xml

代码语言:javascript
复制
<Page ios:class="bg-light" xmlns="http://schemas.nativescript.org/tns.xsd" shownModally="onShownModally">
    <StackLayout class="modal-view">
        <Label android:class="p-l-10 font-weight-normal font-size-larger" ios:class="h2 font-weight-bold p-l-15 p-t-10" text="{{ title }}"></Label>
        <Label class="hr"></Label>
        <ScrollView class="page" height="40%">
            <ListView class="list-group" itemTap="{{ onItemTap }}" items="{{ data }}">
                <ListView.itemTemplate>
                    <Label android:class="h4 text-center font-weight-bold p-b-10" ios:class="h3 text-center font-weight-bold p-y-10" width="100%" text="{{ value }}" 
                            textWrap="true"></Label>
                </ListView.itemTemplate>
            </ListView>
        </ScrollView>
    </StackLayout>
</Page>

注意Android和iOS类之间的区别。这使得dropdown更像系统。

dropdown-modal.js

代码语言:javascript
复制
import { DropDownViewModel } from "./dropdown-view-model";

export const onShownModally = function(args) {
    const dropDownViewModel = new DropDownViewModel(args.context.title, args.context.list, args.closeCallback);
    const page = args.object;
    page.bindingContext = dropDownViewModel;
};

dropdown-view-model.js

代码语言:javascript
复制
import { Observable, ObservableArray } from "@nativescript/core";

export class DropDownViewModel extends Observable {
    constructor(title, items, closeCallback) {
        super();
        this.title = title;
        this.data = new ObservableArray(items);
        this.selectedItem = '';
        this.closeCallback = closeCallback;
    }

    onItemTap(args) {
        this.selectedItem = args.view.bindingContext;
        this.closeCallback(this.selectedItem);
    }
}

这是它在另一个页面中的调用方式。

sample-page.xml

代码语言:javascript
复制
<!--Roles-->
<StackLayout class="m-y-10 m-x-2" row="2" col="1">
    <Label class="far h3 p-l-15 text-black m-b-1" text="&#xf507;  Role" textWrap="true" />
    <TextField editable="false" tap="{{ toggleDropdown }}" dataListId="roles" dataName="role" dataTitle="Role" class="h4 fal text-black input-border-rounded-lg" text="{{ role.value }}" />
</StackLayout>

注意dataListIddataNamedataTitle是如何传递的。

sample-page.js

代码语言:javascript
复制
import { SamplePageViewModel } from "./sample-page-view-model";

const samplePageViewModel = new SamplePageViewModel();

export const onNavigatingTo = async function(args) {
    await samplePageViewModel.populateRolesList();
};

export const onNavigatedTo = async function(args) {
    const page = args.object;
    page.bindingContext = samplePageViewModel;
};

sample-page-view-model.js

代码语言:javascript
复制
import { Frame, Observable } from "@nativescript/core";
import { LookupService } from "~/services/lookupService";
import { AppSettingsUtility } from "~/utilities/appSettingsUtility";

export class SamplePageViewModel extends Observable {
    constructor() {
        super();
        this.lookupService      = new LookupService();
        this.appSettingsUtility = new AppSettingsUtility();
        this.routes             = this.appSettingsUtility.getRoutes();
        this.roles              = [];
        this.role               = { code: 0, value: '' };
    }

    async populateRolesList() {
        this.set('roles', await this.lookupService.getRoles()); // assume roles list
    }

    toggleDropdown(args) {
        const page = args.object.page;
        const that = this;
        const options = {
            context: { title: args.object.dataTitle, list: that.get(args.object.dataListId) },
            closeCallback: (selectedItem) => {
                if(selectedItem)
                    that.set(args.object.dataName, selectedItem);
            }
        };
        page.showModal(this.routes.dropdown, options);
    }


}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64286405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档