首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何通过nativescript-下拉插件实现listview中数据的按需排序?

如何通过nativescript-下拉插件实现listview中数据的按需排序?
EN

Stack Overflow用户
提问于 2019-10-21 17:00:48
回答 1查看 268关注 0票数 0

我正在创建一个简单的Nativescript应用程序与基于数组的项目列表视图。我在掌握可观察到的模块/MVVM模式时遇到了问题。我使用nativescript-down来提供一个排序依据列表,以便对列表视图中的数据进行排序。当页面第一次呈现时,数据将被正确排序,但是当索引更改时,数据不会更新。

如何确保dropdown的"selectedIndex“值正确传递给视图模型,并相应地更新列表视图?

我已经尝试过在模型和"dropDownSelectedIndexChanged“函数中基于selectedIndex进行排序。

main-page.ts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const mainPageModel = new MainPageModel();

export function navigatingTo(args: EventData) {
    const page = <Page>args.object;
    page.bindingContext = mainPageModel;
}

我已经尝试在主页中设置此函数,但它不会更新列表,除非导航离开,然后返回页面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export function dropDownSelectedIndexChanged(args: SelectedIndexChangedEventData) {
    if (args.newIndex == 0) {
        mainPageModel.dataItems.sort(function (a, b) {
            return a.name.localeCompare(b.name);
        });
    } else if (args.newIndex == 1) {
        mainPageModel.dataItems.sort(function (a, b) {
            return b.name.localeCompare(a.name);
        });
    }
}

main-view-model.ts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export class MainPageModel extends Observable {
    // Dropdown populating
    @ObservableProperty() dropdownItems: ObservableArray<any>;
    @ObservableProperty() selectedIndex: number;

    // Recipe templating
    @ObservableProperty() isBusy: boolean = true;
    @ObservableProperty() dataItems: ObservableArray<any>;

    constructor() {
        super();
        this.isBusy = true;
        this.dataItems = new ObservableArray<any>();

        this.dropdownItems = new ObservableArray<any>();
        this.selectedIndex = 0;

        // Populate sort by dropdown
        const items = ["Name (A-Z)", "Name (Z-A)"];
        this.dropdownItems.push(items);

        // Populate recipes stored locally
        let storedRecipes = [];
        try {
            storedRecipes = appSettings.getAllKeys();
            storedRecipes.forEach(element => {
           this.dataItems.push(JSON.parse(appSettings.getString(element)))
            });
        } catch (e) {
            console.log("No stored recipes")
        }

        // Populate recipes from placeholder data
        getData().then((recipeData) => {
            this.dataItems.push(recipeData);
            this.isBusy = false;

            // Sort recipes by index
            // Done as an alternative to "dropDownSelectedIndexChanged"
            if (this.selectedIndex == 0) {
                this.dataItems.sort(function (a, b) {
                    return a.name.localeCompare(b.name);
                });
            } else if (this.selectedIndex == 1) {
                this.dataItems.sort(function (a, b) {
                    return b.name.localeCompare(a.name);
                });
            }
        });
    }
}

main-page.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <GridLayout columns="*,auto,auto" rows="auto,5*" >
        <!-- Add &#xf2e7; back to button -->
        <Button horizontalAlignment="left" row="0" col="0" text="Add New Recipe" tap="addRecipe" class="add-button" />
        <Label horizontalAlignment="right" verticalAlignment="center" text="Sort by:" col="1" row="0" padding="10" fontWeight="bold" fontSize="18" />
        <dd:DropDown items="{{ dropdownItems }}" selectedIndex="{{ selectedIndex }}" 
                    opened="dropDownOpened" closed="dropDownClosed" 
                    selectedIndexChanged="dropDownSelectedIndexChanged"
                    row="0" col="2" itemsPadding="8" verticalAlignment="center" itemsTextAlignment="center" horizontalAlignment="right" />

        <ListView row="1" colSpan="3" class="list-group" items="{{ dataItems }}" separatorColor="transparent">
            <ListView.itemTemplate>
                <GridLayout recipeData="{{ $value }}" tap="recipeDetail" route="recipe-detail/recipe-detail" rows="*,auto,auto" columns="5*, *" class="list-group-item">
                    <Label row="0" col="0" text="{{ name }}" class="h2" />
                    <Image horizontalAlignment="center" row="0" rowSpan="2" col="2" src="{{ image }}" />
                </GridLayout>
            </ListView.itemTemplate>
        </ListView>
        <ActivityIndicator row="1" colSpan="3" busy="{{ isBusy }}" class="activity-indicator" />
    </GridLayout>

如果逻辑在视图模型中,则排序在初始页面加载时有效,而如果我选择另一个索引,则排序不会更改。或者,如果我试图通过"dropDownSelectedIndexChanged“函数更改"selectedIndex”值,列表视图不会立即排序,只有在导航离开并返回主页后才会更新。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-21 18:14:34

与其他方法(切片、弹出、推送)不同,sort(...)方法不会通知组件更改。尝试在排序后刷新ListView,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export function dropDownSelectedIndexChanged(args: SelectedIndexChangedEventData) {
    if (args.newIndex == 0) {
        mainPageModel.dataItems.sort(function (a, b) {
            return a.name.localeCompare(b.name);
        });
    } else if (args.newIndex == 1) {
        mainPageModel.dataItems.sort(function (a, b) {
            return b.name.localeCompare(a.name);
        });
    }
   (<any>event.object).page.getViewById('YourListViewId').refresh();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58490991

复制
相关文章
使用VBA删除工作表多列中的重复行
自Excel 2010发布以来,已经具备删除工作表中重复行的功能,如下图1所示,即功能区“数据”选项卡“数据工具——删除重复值”。
fanjy
2022/11/16
11.4K0
使用VBA删除工作表多列中的重复行
用过Excel,就会获取pandas数据框架中的值、行和列
至此,我们已经学习了使用Python pandas来输入/输出(即读取和保存文件)数据,现在,我们转向更深入的部分。
fanjy
2021/11/29
19.2K0
用过Excel,就会获取pandas数据框架中的值、行和列
Numpy中找出array中最大值所对应的行和列
Python特别灵活,肯定方法不止一种,这里介绍一种我觉得比较简单的方法。 如下图,使用x == np.max(x) 获得一个掩模矩阵,然后使用where方法即可返回最大值对应的行和列。 where返回一个长度为2的元组,第一个元素保存的是行号,第二个元素保存的是列号。
卡尔曼和玻尔兹曼谁曼
2019/01/22
6.4K0
Numpy中找出array中最大值所对应的行和列
问与答63: 如何获取一列数据中重复次数最多的数据?
Q:如下图1所示,在工作表列A中有很多数据(为方便表述,示例中只放置了9个数据),这些数据中有很多重复数据,我想得到重复次数最多的数据是那个,示例中可以看出是“完美Excel”重复的次数最多,如何获得这个数据?
fanjy
2019/08/20
3.6K0
问与答63: 如何获取一列数据中重复次数最多的数据?
SQL 获取一行中多个字段的最大值
在 chaos(id,v1,v2,v3) 表中获取每个 id 对应的 v1、v2、v3 字段的最大值,v1、v2、v3 同为数值类型。
白日梦想家
2020/12/14
11.5K0
pandas中的loc和iloc_pandas获取指定数据的行和列
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/178799.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
10.3K0
pandas中的loc和iloc_pandas获取指定数据的行和列
VBA:根据指定列删除重复行
文章背景:在工作生活中,有时需要进行删除重复行的操作。比如样品测试时,难免存在复测数据,一般需要删除第一行数据,保留后一行的数据。
Exploring
2022/09/20
3.2K0
VBA:基于指定列删除重复行
文章背景:在工作生活中,有时需要进行删除重复行的操作。比如样品测试时,难免存在复测数据,一般需要保留最后测试的数据。之前通过拷贝行的方式保留最后一行的数据(参见文末的延伸阅读1),但运行效率较低。目前通过借助数组和字典达到删除重复行的效果。
Exploring
2022/12/18
3.4K0
VBA:基于指定列删除重复行
获取页面所有a标签并对其添加title属性
今天公司需要做seo优化,添加所有的a标签上面添加title属性。前台在一个一个的添加,我发现了就建议他使用js获取所有的a然后增加属性即可~~(收藏了) <script type=”text/javascript”> $(function(){ for(i=0;i<$(“a”).length;i++) { var a_content=$(“a:eq(“+i+”)”).text(); $(“a:eq(“+i+”)”).attr(‘title‘,a_content); } }); </scrip
苦咖啡
2018/05/08
4.2K0
R语言指定列取交集然后合并多个数据集的简便方法
因为5份数据集以csv格式存储,首先就是获得存储路径下所有的csv格式文件的文件名,用到的命令是
用户7010445
2020/12/18
7.1K0
扩展UltraGrid控件实现对所有数据行的全选功能[Source Code下载]
在前面一篇文章中,我通过对三种Infragistics 控件(UltraToolBarManager、UltraGird和UltraListView)进行扩展,以实现对ToolTip样式的定义,今天我
蒋金楠
2018/01/16
1.5K0
扩展UltraGrid控件实现对所有数据行的全选功能[Source Code下载]
Linux 删除文本中的重复行
这里我做了个简单的测试,当file中的重复行不再一起的时候,uniq将服务删除所有的重复行。经过排序后,所有相同的行都在相邻,因此unqi可以正常删除重复行。
阳光岛主
2019/02/19
8.6K0
获取GridView中的某列值
    protected void GridView1_RowEditing(object sen
Java架构师必看
2021/03/22
10.2K0
【Python】基于某些列删除数据框中的重复值
Python按照某些列去重,可用drop_duplicates函数轻松处理。本文致力用简洁的语言介绍该函数。
阿黎逸阳
2020/09/08
20.6K0
【Python】基于某些列删除数据框中的重复值
SQL中的行转列和列转行
SQL是IT行业很多岗位都要求具备的一项能力,对于数据岗位而言更是如此,甚至说扎实的SQL基础也往往是入职这些岗位的必备技能。而在SQL面试中,一道出镜频率很高的题目就是行转列和列转行的问题,可以说这也是一道经典的SQL题目,本文就这一问题做以介绍分享。
luanhz
2021/06/25
7.2K0
SQL 中的行转列和列转行
行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 的运算符PIVOT来实现。用传统的方法,比较好理解。层次清晰,而且比较习惯。 但是PIVOT 、UNPIVOT提供的语法比一系列复杂的SELECT…CASE 语句中所指定的语法更简单、更具可读性。下面我们通过几个简单的例子来介绍一下列转行、行转列问题。
玖柒的小窝
2021/11/08
5.5K0
SQL 中的行转列和列转行
【说站】excel筛选两列数据中的重复数据并排序
如果靠人眼来一个个的对比excel的两列数据来去重的话,数据量少还能勉强对比一下,如果几千、几万条数据肯定就需要进行程式化处理,excel对于这个问题给我们提供了很方便的解决方案,这里主要用到excel的“条件格式”这个功能来筛选对比两列数据中心的重复值,并将两列数据中的相同、重复的数据按规则进行排序方便选择,甚至是删除。
很酷的站长
2022/11/24
10.5K1
【说站】excel筛选两列数据中的重复数据并排序
点击加载更多

相似问题

迭代地获得数据帧列的最大值,添加一个并对spark/sql中的所有行重复

12

在R中,如何获取数据帧的列的子集,然后消除重复的行?

10

R数据帧从所有列中删除具有最大值的行。

20

在数据帧(R)的所有列中删除具有重复值的行

10

根据R中数据帧的1列复制行

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文