Knockout.js 排序和筛选在击倒剑道网格中不起作用

Knockout.js 排序和筛选在击倒剑道网格中不起作用,knockout.js,kendo-ui,kendo-grid,knockout-kendo,Knockout.js,Kendo Ui,Kendo Grid,Knockout Kendo,我使用的是Knockout-Kendo.js,将数据绑定到网格并在可观察数组发生变化时看到变化并没有问题 然而 排序不起作用,并且没有js错误 请注意,tasks是一个ko.observearray() 哇,这很难,但我想我解决了,看 你的方法的问题是剑道对KO观测值一无所知,击倒剑道只是将数据作为简单的JS对象传递给剑道。因此,如果希望能够更改表中的数据,应该使用一些变通方法。我的方法是使用该方法告诉knockout任务数组中的任务已更新 以下是视图模型的外观: function ViewMo

我使用的是Knockout-Kendo.js,将数据绑定到网格并在可观察数组发生变化时看到变化并没有问题

然而

  • 排序不起作用,并且没有js错误 请注意,tasks是一个ko.observearray()


    哇,这很难,但我想我解决了,看

    你的方法的问题是剑道对KO观测值一无所知,击倒剑道只是将数据作为简单的JS对象传递给剑道。因此,如果希望能够更改表中的数据,应该使用一些变通方法。我的方法是使用该方法告诉knockout任务数组中的任务已更新

    以下是视图模型的外观:

    function ViewModel() {
        var self = this;
        self.tasks = ko.observableArray();
        self.viewDetails = function(data) {
            alert(data.TaskId);
        };
        self.changeData = function() {
            self.tasks()[0].TaskId = 3;
            self.tasks.valueHasMutated(); // this will tell knockout that tasks were changed
        }
    };
    
    任务
    是任务对象的可观察数组:

    function Task(id, description, raisedBy, status) {
        this.TaskId = id;
        this.Description = description;
        this.RaisedBy = raisedBy;
        this.Status = status;
    };
    
    我还添加了具有虚拟数据的初始化方法:

    ViewModel.prototype.init = function() {
        var self = this;
        var data = {
            source: [
                new Task(1, "Task 1", "User 1", "New"),
                new Task(2, "Task 2", "User 2", "Closed"),
                new Task(3, "Task 3", "User 3", "In progress"),
                new Task(4, "Task 4", "User 4", "New"),
                new Task(5, "Task 5", "User 5", "In progress")
            ]
        };
        self.tasks(data.source);
    }
    

    所以,现在排序工作正常了,如果您更改了某些任务(按中的“更改数据”按钮),表将刷新。

    我看不出您所做的有任何错误。您可以发布视图模型和示例数据,或者在JSFIDLE上复制这个问题吗?谢谢您的回复。我已经用更多的信息更新了原始问题。您的JSFIDLE在这里工作得很好!你用更大的阵列测试过吗?valueHasMutated导致击倒剑道重新加载数据源,因此我预计会出现性能陷阱!
    function Task(id, description, raisedBy, status) {
        this.TaskId = id;
        this.Description = description;
        this.RaisedBy = raisedBy;
        this.Status = status;
    };
    
    ViewModel.prototype.init = function() {
        var self = this;
        var data = {
            source: [
                new Task(1, "Task 1", "User 1", "New"),
                new Task(2, "Task 2", "User 2", "Closed"),
                new Task(3, "Task 3", "User 3", "In progress"),
                new Task(4, "Task 4", "User 4", "New"),
                new Task(5, "Task 5", "User 5", "In progress")
            ]
        };
        self.tasks(data.source);
    }