【问题标题】:kogrid with server-side paging+filtering: self.sortedData is not a function带有服务器端分页+过滤的 kogrid:self.sortedData 不是函数
【发布时间】:2013-01-29 16:30:37
【问题描述】:

我遇到了淘汰赛和 kogrid 的问题。经过几次测试,我设法在这个小提琴中重现了它:

http://jsfiddle.net/MVuUp/

简而言之,我有一个示例 VM (ItemsViewModel),它应该向 kogrid 提供数据,并带有服务器实现的过滤和分页。 vm 公开了一个 gridOptions 对象,其中包含 kogrid 所需的所有数据,并调用了一个刷新函数以从服务器获取数据。在小提琴中,我用一些虚拟的内联数据替换了 ajax 调用以获取真实数据。

现在,在加载页面时,我在 kogrid 源代码中不断收到此错误:

错误:TypeError:self.sortedData 不是函数源文件: http://ericmbarnard.github.com/KoGrid/lib/KoGrid.debug.js线:1473

如果我只是使用名为 dummyData 的 observable 数组和网格的 div,就像在基本的 kogrid 示例 (https://github.com/Knockout-Contrib/KoGrid) 中一样,则不会出现此错误;所以我想我对图书馆的使用有问题。

这是我的虚拟机的相关部分:

function ItemsViewModel() {
    var self = this;
    self.dummyArray = ko.observableArray([{
        name: "Goofy",
        age: 27
    }, {
        name: "Mickey",
        age: 33
    }]);
    self.items = ko.observableArray([]);
    self.filterOptions = {
        filterText: ko.observable(""),
        useExternalFilter: true
    };
    self.pagingOptions = {
        pageSizes: ko.observableArray([5, 10]),
        pageSize: ko.observable(20),
        totalServerItems: ko.observable(0),
        currentPage: ko.observable(1)
    };
    self.gridOptions = {
        data: self.items,
        enablePaging: true,
        multiSelect: false,
        filterOptions: self.filterOptions,
        pagingOptions: self.pagingOptions,
        columnDefs: [{
            field: "id",
            displayName: "ID"
        }, {
            field: "title",
            displayName: "Title"
        }]
    };
    self.refresh();
}

这个函数是用来获取数据的(目前我把过滤掉了):

ItemsViewModel.prototype.refresh = function () {
var params = {
    page: this.pagingOptions.currentPage(),
    pageSize: this.pagingOptions.pageSize(),
    sortBy: "datemodified",
    isSortDesc: true
};
// dummy data (2 pages x 5)
var data = {
    page: 1,
    totalPages: 2,
    totalRecords: 10,
    records: []
};
for (var i = 0; i < 10; i++) {
    data.records.push({
        id: i,
        title: "title " + i
    });
}
ko.utils.arrayPushAll(this.items, data.records);
this.pagingOptions.totalServerItems(data.totalRecords);
}

我的 HTML 只是一个数据绑定设置为的 div

koGrid: { data: gridOptions }

【问题讨论】:

    标签: javascript knockout.js kogrid


    【解决方案1】:

    在你的html中,改变

    &lt;div class="datagrid" data-bind="koGrid: { data: gridOptions }"&gt;&lt;/div&gt;

    &lt;div class="datagrid" data-bind="koGrid: gridOptions "&gt;&lt;/div&gt;

    【讨论】:

    • 谢谢你,成功了!从文档中,似乎需要一个具有数据属性的对象,但事实并非如此。
    猜你喜欢
    • 2011-11-05
    • 2013-06-28
    • 1970-01-01
    • 2015-06-10
    • 2015-03-05
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多