2012-01-20 60 views
1

我已經構建了一個dojo 1.5數據網格+ dojox.data.JsonRestStore。當網格渲染時,我可以看到「胡蘿蔔」,它顯示排序已經開始,並且正在默認右列。但是,列的內容(字符串值 - 字段:'projectShortName',...見下面的代碼)實際上沒有排序。按降序/升序按鈕不會更改順序或行。他們基本上被鎖定了。我不知道爲什麼?在Dojo 1.5數據網格中排序不起作用

我對某些列關閉了列排序,對其他人使用canSort()關閉了列排序。我只有具有排序關閉列的調用格式化程序。我試圖讓所有的列可以排序,或者只是我真正想要的那一列。沒有骰子。

這裏是佈局/網格代碼: VAR佈局= [{ 字段: '_item', 名: '& NBSP', 格式化:selectFormatter, 寬度: '25像素' }, { 現場: '項目名稱', 名稱: '項目名稱', 寬度: '325px' }, { 場: 'projectShortName', 名稱: '簡稱', 寬度: '80px' }, { 場: 'projectAreaName', 名稱: 'RQM項目區域', 寬度: '175px' }, { 場: '_item', 名稱: '測試指南狀態', 寬度: '190px', 格式化:testCaseGenerationOptionFormatter }, { 字段: 'projectOwner', 名稱: '所有者', 寬度: '140px' }, { 字段: 'projectCreationTime', 名: '創建日期', 寬度:'100px' }, { field:'projectLastUpdateTime', name:'Last Modified Date', width:'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

您可能會使用錯誤的比較運算符。 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會比較內部引用相等。

+0

嗨TedPrz,我試過上面的(使用===),它沒有工作。我認爲這個問題並不是嚴格意義上的問題。我已經能夠在正確的行上看到桌子頭上的排序「胡蘿蔔」,並且在我不想排序的行上沒有胡蘿蔔。所以我認爲那個代碼不是問題?問題在於排序是降序還是升序,順序不會改變,顯然不是按字母順序排列的。當然,我認爲這種排序應該是按字母順序的。 :) -Doug – Doug