【问题标题】:Sorting in Dojo 1.5 datagrid doesn't workDojo 1.5 数据网格中的排序不起作用
【发布时间】:2012-02-15 07:14:39
【问题描述】:

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

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

这是布局/网格代码: 可变布局 = [{ 字段:'_item', 名称:'&nbsp', 格式化程序:选择格式化程序, 宽度:'25px' }, { 字段:“项目名称”, name: '项目名称', 宽度:'325px' }, { 字段:'projectShortName', name: '简称', 宽度:'80px' }, { 字段:'projectAreaName', name: 'RQM 项目区', 宽度:'175px' }, { 字段:'_item', name: '测试指南状态', 宽度:'190px', 格式化程序:testCaseGenerationOptionFormatter }, { 字段:“项目所有者”, 名称:'所有者', 宽度:'140px' }, { 字段:'projectCreationTime', name: '创建日期', 宽度:'100px' }, { 字段:'projectLastUpdateTime', name: '最后修改日期', 宽度:'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。任何意见,将不胜感激! -道格

【问题讨论】:

    标签: sorting datagrid dojo


    【解决方案1】:

    您可能使用了错误的比较运算符。 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

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

    【讨论】:

    • 嗨 TedPrz,我尝试了上述方法(使用 ===),但没有成功。我认为问题不在于该列是否可以排序。我已经能够在正确的行上看到表头中的排序“胡萝卜”,而在我不想排序的行上没有胡萝卜。所以我认为该代码不是问题?问题是排序是降序还是升序,顺序永远不会改变,而且显然不是按字母顺序排列的。当然,我假设排序应该是按字母顺序排列的。 :) -道格
    猜你喜欢
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2011-11-17
    • 2011-04-14
    • 2014-01-02
    • 1970-01-01
    • 2013-11-08
    相关资源
    最近更新 更多