bugfix> javascript > 投稿

jsGridを実装し、サーバー側のフィルタリングを行いました。今度は、サーバー側に並べ替えパラメーターを送信し、列をクリックしてサーバー側で並べ替えを行います。 これは私がグリッドを実装する方法です-

var db = {
  loadData: function(filter) {
    var bFilter = [];
    var d = $.Deferred();
    console.log("sorting:", filter.sortField, filter.sortOrder);
    for (var prop in filter) {
      if (prop != "sortField" && prop != "sortOrder") {
        bFilter.push({
          "Name": prop,
          "Value": filter[prop]
        })
      } else{
       var sorting ={ "Name": filter["sortField"], "Type": filter["sortOrder"] };
      }
    }
      $.ajax({
        url: "http://abc/abc",
        dataType: "json",
        data: JSON.stringify({
          "filter": bFilter,
          "sorting": sorting
        })
      }).done(function(response) {
        d.resolve(response.value);
      });
    return d.promise();
    },
    };

    $("#jsGrid").jsGrid({
    height: 300,
    width: "100%",
  filtering: true,
  editing: true,
  sorting: true,
  paging: true,
  autoload: true,
  pageSize: 2,
  pageButtonCount: 5,
  deleteConfirm: "Do you really want to delete the client?",
  controller: db,
  fields: [{
      name: "Name",
      type: "text",
      width: 150
    },
    {
      name: "Age",
      type: "number",
      width: 50
    },
    {
      name: "Address",
      type: "text",
      width: 200
    },
    {
      type: "control"
    }
  ]
});

サーバー側でフィルタリングと並べ替えを一緒に行うために、並べ替えのためにヘッダーをクリックすると同じロードデータメソッドをどのように呼び出しますか? クライアント側の並べ替えを無効にし、フィルタリングと同じようにサーバー側でそれを行う方法。 sorting:false を設定した場合列ヘッダーからクリックを削除します。これも保持したいです。

回答 1 件
  • ソート機能を変更することでこれを解決できました- jsGrid.loadStrategies.DirectLoadingStrategy.prototype.sort = function () { var filters = $("#tableId").jsGrid("getFilter"); var sorting = $("#tableId").jsGrid("getSorting"); this._grid.controller.loadData(filters, sorting);}

あなたの答え