在Dojo 1.5数据网格中排序不起作用

时间:2012-01-20 18:37:15

标签: sorting datagrid dojo

我已经构建了一个dojo 1.5 datagrid + dojox.data.JsonRestStore。当网格呈现时,我可以看到“胡萝卜”,表明排序已经解雇并且正在默认右列。但是,列的内容(字符串值 - 字段:'projectShortName',...请参阅下面的代码)实际上并未排序。点击降序/升序按钮不会改变顺序或行。他们基本上都被锁定了。我不确定为什么?

我为某些列关闭了列排序,而使用canSort()关闭了其他列。我只有带有排序关闭列的调用的格式化程序。我试过让所有列都可以排序,或者只是我真正想要的那些列。没有骰子。

这是布局/网格代码: var layout = [{         字段:'_ item',         名称:'& nbsp',         formatter:selectFormatter,         宽度:'25px'     },     {         字段:'projectName',         名称:'项目名称',         宽度:'325px'     },     {         field:'projectShortName',         名称:'短名',         宽度:'80px'     },     {         field:'projectAreaName',         名称:'RQM项目区',         宽度:'175px'     },     {         字段:'_ item',         名称:'测试指南状态',         宽度:'190px',         formatter:testCaseGenerationOptionFormatter     },     {         字段:'projectOwner',         名称:'所有者',         宽度:'140px'     },     {         字段:'projectCreationTime',         名称:'创建日期',         宽度:'100px'     },     {         字段:'projectLastUpdateTime',         名称:'上次修改日期',         宽度:'120px'     }];

dojo.empty(dojo.byId('workspaceGridContainer'));
if (dijit.byId("projectGrid")) {
    dijit.byId("projectGrid").destroyRecursive();
}

// Create a new grid:
var grid = new dojox.grid.DataGrid({
    id:'projectGrid',
    onHide: dojo.hitch(this, function() {
          dijit.byId("projectGrid").destroyRecursive();
      }),
    store: jsonStore,
    clientSort: true,
    autoHeight: true,
    //sortInfo: "-2",
    selectionMode: 'single',
    rowsPerPage: '100',
    structure: layout
},document.createElement('div'));

dojo.byId("workspaceGridContainer").appendChild(grid.domNode);

// Call startup, in order to render the grid:
grid.startup();

//var test = grid.setSortInfo(obj);
// Prevent sorting on column 1
grid.canSort = function(col){ if((Math.abs(col) == 1) || (Math.abs(col) == 5) || (Math.abs(col) == 6) || (Math.abs(col) == 7) || (Math.abs(col) == 8)) { return false; } else { return true; } };

var index = grid.getSortIndex();
if(index!=2) {
    if(grid.canSort(2)){
        grid.setSortIndex(2, false);
    }
}

正如您所看到的,我已经尝试过sortInfo。任何意见,将不胜感激! -Doug

1 个答案:

答案 0 :(得分:0)

您可能使用了错误的比较运算符。 dojo文档使用严格相等的'===',而您只使用相等的'=='。这会导致js出现问题,尤其是在比较文字时,即'1'与对象:'Math.abs(col)。官方grid.canSort方法应编码如下:

function canSort(col){ return Math.abs(col) === 2;}  

注意Mozilla对等于运算符的描述,以及js用于解析不同数据类型的类型转换: https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comparison_Operators

Equal(==) - 如果两个操作数的类型不同,JavaScript会转换操作数,然后应用严格比较。如果操作数是数字或布尔值,操作数将尽可能转换为数字;否则,如果任一操作数是字符串,则另一个操作数将转换为字符串(如果可能)。如果两个操作数都是对象,那么JavaScript会比较内部引用,当操作数引用内存中的同一个对象时,它们是相等的。