javascript - 分页不适用于 KO Grid

标签 javascript jquery gridview knockout.js knockout-2.0

我正在使用 KO-grid,它似乎可以很好地加载所有数据。现在,我正在研究分页部分,但它似乎无法正常工作。是的,我在底部做了分页控制,但是当它能够决定页面大小时,它似乎不起作用。根据 https://github.com/ericmbarnard/KoGrid/wiki/Configuration

上给出的配置详细信息,页面大小由两个选项驱动

1.pageSizes:[5,10, 25] -- 似乎显示选项,但是当我将选择从 5 更改为 10 时,它似乎不会对这些选择起作用。 2.pagesize ://somenumber -- 破坏代码。

我在 jsfiddle 上有它的工作模型:http://jsfiddle.net/sf4p3/46/

有什么建议吗?

最佳答案

好吧,看来 KoGrid 中的分页并没有发挥您所希望的魔力。

以下是 GitHub 上 KoGrid wiki 中示例的链接:

http://ericmbarnard.github.com/KoGrid/examples/Complex-Server-Side-Paging.html

在查看 HTML 页面的源代码时,人们可能会看到 View 模型声明的开头,而无需滚动(当然取决于屏幕分辨率)。无论如何,这都是从第 30 行左右开始的。

请注意, View 模型中有一个名为 pageSize 的可观察量,并且它被设置为 50。

向下滚动一点,您应该会看到名为 filtersortgetPagedDataAsync 的函数,用于过滤数据、对数据进行排序以及为当前页面创建数据集。

以下是 getPagedDataAsync 函数的代码:

this.getPagedDataAsync = function (pageSize, page, filterInfo, sortInfo) {
    setTimeout(function () {
        var data = window.getExampleData();
        var filteredData = filter(data(), filterInfo);
        var sortedData = sort(filteredData, sortInfo);
        var pagedData = sortedData.slice((page - 1) * pageSize, page * pageSize);
        self.myObsArray(pagedData);
    }, 0);
};

在没有看到 View 模型其余部分的详细信息的情况下,人们应该能够通过阅读上面的代码知道该函数首先检索要为此示例页面显示的所有数据,然后过滤数据并对数据进行排序.

之后,对数据数组进行切片以提取当前页面要查看的数据,并将该切片传递给 myObsArray 可观察数组,用于在网格中显示数据.

以下是本例中网格的声明:

<div id="sandBox" class="example" style="height: 600px; max-width: 700px;" 
    data-bind="koGrid: { 
        data: myObsArray,
        columnDefs: [ 
            { field: 'Sku', width: 140 },
            { field: 'Vendor', width: 100 },
            { field: 'SeasonCode', displayName: 'Season Code', width: 150 },
            { field: 'Mfg_Id', displayName: 'Mfg ID', width: 180 },
            { field: 'UPC', width: 170 }
        ],
        autogenerateColumns: false,
        isMultiSelect: false,
        enablePaging: true,
        useExternalFiltering: true,
        useExternalSorting: true,
        filterInfo: filterInfo,
        sortInfo: sortInfo,
        pageSize: pageSize,
        pageSizes: [25, 50, 75],
        currentPage: currentPage,
        totalServerItems: totalServerItems,
        selectedItem: selectedItem }">
</div>

希望这对您有所帮助,并且您将能够解决分页问题。

无论如何,如果您有任何疑问,请告诉我。

更新

@Californicated 我正在度假,但我有一些空闲时间来看看你最新的 fiddle 。

我 fork 了您最新的 fiddle 中的内容,并进行了以下更改以使分页正常工作:

在可观察对象的声明中,我将 pageSize 的值更改为 2,将 totalServerItems 的值更改为 7。 在 JS 中,我更改了 data var 的声明 getPagedDataAsync 函数,因此它正在检索 Prizefillfilmentstatuses 可观察数组。

在JS代码的最后一行,我将第一个参数从50更改为2。 在 jsFiddle 工具栏中,我将第一个下拉列表从“onLoad”更改为“无换行(正文)”

在 HTML 中 koGrid 的声明中,我添加了以下选项/参数:

pageSize: pageSize,
currentPage: currentPage,
totalServerItems: totalServerItems,
selectedItem: selectedItem

页面设置单独处理 JS 更改,但分页工具(上一个、下一个等)直到我在 koGrid 声明中添加 totalServerItems 选项后才处于事件状态。

再次强调,如果您有任何疑问,请告诉我。

关于javascript - 分页不适用于 KO Grid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12535503/

相关文章:

javascript - 单击鼠标隐藏div

java - 在上传到服务器之前检查文件内容

javascript - 在 Puppeteer 中如何从默认配置文件切换到 chrome 窗口到所需的配置文件

jquery - 使用 owlcarousel2 进行幻灯片放映,为每张幻灯片设置移动

javascript - 如何根据 SelectList 中选定的值更改 CodeMirror 编辑器的模式

c# - 数据集、父/子表关系和 Gridview 控件

asp.net - GridView 数据绑定(bind)不起作用

javascript - Mongoose 动态模式字段

javascript - jQuery - Ajax POST 似乎不起作用

c# - 使用 DropDownList 填充 Gridview