为什么这个数据网格以奇怪的顺序排序?

时间:2012-05-14 12:09:39

标签: javascript datagrid dojo

我有一个数据网格,其中每一行都有一个列,我在其中定义了一个格式化程序,根据数据库中的内容格式化显示结果,并根据数据库创建一个背景颜色div。 / p>

我的数据网格有这个结构:

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;
    }
},

当我按列标题进行排序时,它对行进行排序,放置不一致,所以我不知道它是否正确排序(见下图)。如何定义数据网格对此列进行排序的方式?

How it sorts

我认为这是我在格式化程序中由于<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});
      ...

1 个答案:

答案 0 :(得分:2)

我找到了答案。问题在于ObjectStore。这个商店(出于某种原因)不能正确排序,在将商店类型更改为ItemFileReadStore后,它会正确排序。切换商店的另一个原因是ItemFileReadStore还支持允许自定义排序的comparatorMap属性,ObjectStore不支持此属性。

溶液:

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

      pgrid = new DataGrid({
        store: store,
        ...