1

各行に列があり、データベースの内容に応じて表示結果をフォーマットし、データベースにdiv応じて背景色を作成するフォーマッターを定義したデータグリッドがあります。

データグリッドには次の構造があります。

structure: [
  {
    name: "Name",
    field: "name",
    width: "auto"
  },
  {
    name: "Initials",
    field: "initials"
  },
  {
    name: "E-mail",
    field: "email",
    width: "auto"
  },
  {
    name: "Kerberos",
    field: "kerberos",
    width: "120px",
    formatter: function(kerberos){
      var format = "";

      if(kerberos == "password expired" || kerberos == "account expired"){
        format = '<div class="yellow" title="'+kerberos+'">'+kerberos+'</div>';
      }else if(kerberos == "ok"){
        format = '<div class="green" title="'+kerberos+'">'+kerberos+'</div>';
      }else{
        format = '<div class="red" title="Has no kerberos account">not available</div>';
      }

      return format;
    }
},

列ヘッダーを押して並べ替えると、行が並べ替えられ、一貫性がないため、正しく並べ替えられるかどうかわかりません (下の画像を参照)。データグリッドがこの列をソートする方法を定義するにはどうすればよいですか?

並べ替え方法

<div...>文字のためにフォーマッタで行うHTML部分だと思っていました<>が、テキストを出力するだけだとまだ奇妙にソートされます(私の理解では、アルファベット順にソートする必要があります)。なぜこれが起こるのか、どうすれば修正できるのか誰か知っていますか?

編集: データの取得/割り当て方法を追加するのを忘れていました。JSON形式のxhr.postから多くのデータを取得し、次のようにします:

dojo.xhr.post({
    url: "/cgi-bin/users.cgi",
    handleAs: "json",
    content: {
      psearch: "dojoXhrBlank"
    },
    load: function(jsondata){
      // Creating a store for the datagrid
      var personStore = new Memory({ data: jsondata });

      // Create datastore for datagrid
      var gridStore = ObjectStore({objectStore: personStore});
      ...
4

1 に答える 1

2

答えを見つけました。問題はにありますObjectStore。このストアは(何らかの理由で)正しくソートされず、ストアタイプを適切にソートするように変更した後ItemFileReadStore。ストアを切り替えるもう1つの理由は、カスタムソートを可能にItemFileReadStoreする属性もサポートしているため、この属性はサポートされていません。comparatorMapObjectStore

解決:

load: function(jsondata){      
      var store = new ItemFileReadStore({
        data: { identifier: "id", items: jsondata }
      });

      pgrid = new DataGrid({
        store: store,
        ...
于 2012-05-15T06:48:30.677 に答える