jquery 视图 模型 ( 可 观察 ) 内 的 数据 源 用于 网格 中 , 尝试 在 不同 网格 ( 不同 排序 、 筛选 器 ) 中 使用 相同 的 数据 源

iyfjxgzm  于 2022-11-22  发布在  jQuery
关注(0)|答案(1)|浏览(102)

所以我有一个viewModel和一个datasource
(HRSelectorDataSource、kendoHRBaseGrid是自定义小部件,请不要担心)

var viewModel = kendo.observable({
        /* datasources */
        listDataSource: new kendo.ui.HRSelectorDataSource({
            ... options...
        }),

我有第一个grid1,在这里我可以很好地使用数据源

var grid1 = $("#grid").kendoHRBaseGrid({
            dataSource: viewModel.get("listDataSource")
                            ...
    }).data("kendoHRBaseGrid");

现在我尝试使用第二个网格(grid2),它将获得相同的数据源(listDataSource),但它将具有不同的排序或筛选。
我试图在grid2中添加一些过滤,但它也更改了grid1中的过滤。
所以我在想一个解决办法

a)制作此数据源的副本以便在grid2中使用

我不知道怎么做,我也不知道最好的做法是不是再次从服务器获取数据。

**B)**以某种方式对网格2而不是数据源进行筛选

"有人知道怎么解决这个问题吗"

hgtggwj0

hgtggwj01#

你不需要再次从服务器获取数据,只需要从数据源获取数据。初始化kendoHRBaseGrid小部件时,你可以创建一个数据源的新示例,但将数据设置为与原始数据源中的数据相同:

var grid1 = $("#grid").kendoHRBaseGrid({
  dataSource: new kendo.data.DataSource({
    data: viewModel.get('listDataSource').data(),
    filter: { field: 'name', operator: 'startswith', value: 'foo' },
    sort: { field: 'name', dir: 'desc' }
  }),
  // etc...
}).data("kendoHRBaseGrid");

现在,如果原始数据源使用服务器端筛选、分页或排序,则需要再次访问服务器。但如果数据源使用客户端操作,则上面的示例应该可以工作。

相关问题