Сортировка в додзё 1.5 не работает - PullRequest
1 голос
/ 20 января 2012

Я построил таблицу данных dojo 1.5 + dojox.data.JsonRestStore. Когда сетка рендерится, я вижу «морковку», которая показывает, что сортировка сработала и по умолчанию в правом столбце. Однако содержимое столбца (строковые значения - field: 'projectShortName', ... см. Код ниже) фактически не сортируется. Нажатие на нисходящую / восходящую кнопку не меняет порядок или строки. Они по сути заблокированы. Я не уверен, почему?

У меня сортировка столбцов отключена для некоторых столбцов и включена для других с помощью canSort (). У меня есть только средства форматирования для вызовов со столбцами, у которых сортировка выключена. Я попытался сделать все столбцы сортируемыми или только те, которые мне действительно нужны. Нет кости.

Вот код компоновки / сетки: var layout = [{ поле: '_item', имя: '& nbsp', форматтер: выберите формат, ширина: '25px' }, { поле: 'имя_проекта', Название: «Название проекта», ширина: 325px }, { поле: 'projectShortName', имя: «Короткое имя», ширина: '80px' }, { поле: 'projectAreaName', название: «RQM Project Area», ширина: 175px }, { поле: '_item', название: «Test Guide Status», ширина: '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 голосов
/ 21 января 2012

Возможно, вы используете неправильный оператор сравнения. Документация 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 сравнивает внутренние ссылки, которые равны, когда операнды ссылаются на один и тот же объект в памяти.

...