gpt4 book ai didi

javascript - ext js 存储,数据操作(linq 类型查询)

转载 作者:行者123 更新时间:2023-11-29 21:30:29 30 4
gpt4 key购买 nike

我正在处理我的第一个 Ext JS 项目,我的源数据是从商店中的 Web 服务器下载的。现在我想让各种网格都显示该源数据的一些变化。例如,网格 1 将是按 1 个特定列分组的源数据。网格 2 将按特定列分组,其中列 X =“变量”。等等等等。

我有 C# 背景,在 WPF 工作。所以通常我会使用可观察集合,并在可观察集合上运行 LINQ 以形成一个新的可观察集合,然后将该新集合绑定(bind)到我的网格。

我的问题是,如何在 EXT JS 中对商店运行 LINQ 类型查询?

最佳答案

您可以在 ExtJS 中对商店运行 LINQ 类型查询:您可以使用 query 从商店轻松获取 CollectionqueryBy方法。

但是您不能像这样为您的网格工作,因为网格不能仅在集合上运行,它们每个都需要一个存储。您不会希望对这些商店使用 LINQ 类型查询。

如果您使用的是 ExtJS6,您可以查看 ChainedStore .您可以将每个网格绑定(bind)到以您的数据存储为源的 ChainedStore。通过使用 sort()group()addFilter()<,可以独立于源和其他存储对每个 ChainedStore 进行过滤、排序和分组 各自商店的功能。

如果您使用的是早期版本,则必须使用多个存储并手动从主存储复制所有数据。请注意 store.add() 采用记录数组,而不是集合。代替 store.add(collection),使用 store.add(collection.getRange())getRange() 函数将返回一个包含集合中所有项目的数组。

从评论中回答您的问题:如果我需要做一些简单的事情,比如创建一个新商店,从 store1 开始,按 column1 对所有内容进行分组,然后对 column2 求和怎么办?

在 ExtJS6 中,如果你想在网格中显示分组和总和,那将是这样的:

var store2 = Ext.create('Ext.data.ChainedStore',{
source:store1, // use the data from the other store.
grouper:{
property:'someTestField' // grouping is done inside this store.
}
});

Ext.create('Ext.grid.Panel',{
store:store2,
features:[{
ftype:'groupingsummary' // a summary row for each group is provided by this
}],
columns:[{
xtype:'numbercolumn'
dataIndex: 'someTestField'
summaryType: 'sum' // this column should have the sum in the summary row.
}]
})

未经测试且无保修。如果您想在没有网格的情况下进行计算,只需计算总和,这必须像这样手动完成:

var sums = {};
store1.getGroups().each(function(group,i) {
sums[i] = 0;
group.each(function(record) {
sums[i] += record.get(propertyName);
});
});

关于javascript - ext js 存储,数据操作(linq 类型查询),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36600021/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com