0

私はノックアウトバインディングに取り組んでいます..実装するノックアウトソートがあり、この方法で実行しました..

function notesViewModel() {
    _this.colName = "CreatedDate";
    _this.sortOrder = "desc";
    _this.notes = ko.observableArray();

   _this.SortItems = function (colname) {
        var newNotes = _this.notes();
        if (_this.sortOrder === "desc") {
            this.notes(newNotes.sort(notesViewModel._getSortFunction = function (a, b) {
                return a[colname] < b[colname] ? -1 : 1;
            }));
            switchSortOrder();
        } else {
            this.notes(newNotes.sort(notesViewModel._getSortFunction = function (a, b) {
                return a[colname] > b[colname] ? -1 : 1;
            }));
            switchSortOrder();
        }
    };
    function switchSortOrder() {
        if (_this.sortOrder === "asc") {
            _this.sortOrder = "desc";
        } else {
            _this.sortOrder = "asc";
        }
    }
 ko.applyBindings(_this, $("body").get(0));
return _this;
}

私のhtmlコードは次のようになります:

<table id="notes" class="notes_table">
        <tr class="head">
        <th data-bind='click: function() { SortItems("CreatedDate")}'>
        <span>Date</span>
        </th>
        <th data-bind='click: function() { SortItems("Type")}'>
        <span>Type</span>
        </th>
        <th data-bind='click: function() { SortItems("Category")}'>
        <span>Category</span>
        </th>
        <th data-bind='click: function() {SortItems("AddedBy")}'>
        <span>Added by</span>
        </th>
        <th>
        <span>Alerts</span>
        </th>
        <th></th>
        </tr>
        <tbody data-bind="template: { name: 'StudentNote', foreach: notes }"></tbody>
    </table>

このようなものにソート機能をリファクタリングしたい..

_

this.SortItems = function (colname) {
        var newNotes = _this.notes();
        this.notes(newNotes.sort(notesViewModel._getSortFunction = compareFunction (a, b,_this.sortOrder)));

  function comparerFunction(a,b,sortOrder)
 {
     if(sortOrder === "desc")
    {

     return a[colname] < b[colname] ? -1 : 1;
     _this.sortOrder = "asc";

    }
    else
    {
     return a[colname] > b[colname] ? -1 : 1;
     _this.sortOrder = "desc";
    }
 }

};

しかし、それはうまくいきませんでした.aとbのパラメータが利用できないと言っていました..匿名関数からロジックを分離する方法を誰か教えてください.

4

1 に答える 1