Javascript 在Knockout.js中,如何对数组进行排序

Javascript 在Knockout.js中,如何对数组进行排序,javascript,knockout.js,Javascript,Knockout.js,在ViewModel中,我有一个ObservalArray和一个computed,返回视图中管理的数组: var operators = ko.observableArray([]); var records = ko.computed(function () { return operators(); }); <table id="table-hour"> <thead> <tr>

在ViewModel中,我有一个ObservalArray和一个computed,返回视图中管理的数组:

var operators = ko.observableArray([]);
    var records = ko.computed(function () {
        return operators();
    });
<table id="table-hour">
    <thead>
        <tr>
            <th data-bind="click: function(data, event) { Order(data, event, 'fullname')}" data-sort="asc" id="th-fullname">Fullname</th>
        </tr>
    </thead>
    <tbody>
        <!-- ko foreach: records -->
        <tr>
            <td>
                <span data-bind="text: fullname"></span>
            </td>
        </tr>    
        <!-- /ko -->
    </tbody>
这是我的分类方法

Order = function (data, event, colName) {
            var th = $('#th-' + colName),
                attr = th.data('sort');

            setAttribute(th, attr); //switch data-sort between 'asc' and 'desc'

            if (attr === 'asc') {
                operators = operators.sort(function (a, b) {
                    return (a.fullname === b.fullname) ? 0 : (a.fullname < b.fullname ? -1 : 1);
                });
            }
            else {
                operators = operators.sort(function (a, b) {
                    return (a.fullname === b.fullname) ? 0 : (a.fullname > b.fullname ? -1 : 1);
                });
            }
        };
Order=函数(数据、事件、colName){
变量th=$('#th-'+colName),
属性=第三个数据(“排序”);
setAttribute(th,attr);//在'asc'和'desc'之间切换数据排序
如果(attr=='asc'){
运算符=运算符.排序(函数(a,b){
返回值(a.fullname==b.fullname)?0:(a.fullnameb.fullname?-1:1);
});
}
};
这是一种观点:

var operators = ko.observableArray([]);
    var records = ko.computed(function () {
        return operators();
    });
<table id="table-hour">
    <thead>
        <tr>
            <th data-bind="click: function(data, event) { Order(data, event, 'fullname')}" data-sort="asc" id="th-fullname">Fullname</th>
        </tr>
    </thead>
    <tbody>
        <!-- ko foreach: records -->
        <tr>
            <td>
                <span data-bind="text: fullname"></span>
            </td>
        </tr>    
        <!-- /ko -->
    </tbody>

全名

嗯,排序功能工作起来很有魅力,事实上,通过浏览器调试,我可以看到数组以两种方式排序,但视图只在第一次更新。
我应该怎么做才能解决这个问题?

问题是,您需要更新ObservalArray,并将数据放回该数组中

如果观察对象未更新,则视图不会更新


看看JavaScript排序功能()

问题是,您需要更新ObservalArray,并将数据放回该数组中

如果观察对象未更新,则视图不会更新


看看JavaScript排序功能()

是的,你说得对。我做得不对。代替operators=operators.sort(…),在ObservalArray上调用sort实用程序就足够了:if(attr=='asc'){operators.sort(函数(a,b){…};}是的,你是对的。我做得不对。代替operators=operators.sort(…),在ObservalArray上调用sort实用程序就足够了:if(attr=='asc'){operators.sort(函数(a,b){…};}