我已经构建了一个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
答案 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会比较内部引用,当操作数引用内存中的同一个对象时,它们是相等的。