2015-08-25 3 views
0

Я пытаюсь переопределить логику сортировки в dgrid, как предложено kfranqueiro по этой ссылке - https://github.com/SitePen/dgrid/issues/276.dgrid custom sort issue

Я получаю данные с сервера в отсортированном порядке и просто хочу обновить интерфейс заголовка столбца. Я делаю это -

On(mygrid, 'dgrid-sort', lang.hitch(this,function(event){ 
    var sort = event.sort[0]; 
    var order = this.sort.descending ? "descending" : "ascending"; 
    console.log("Sort "+ this.sort.property + " in " +order+" order."); 
    event.preventDefault(); 
    mygrid.updateSortArrow(event.sort, true); 
    myFunctionToRefreshGrid(); 
})); 
... 
myFunctionToRefreshGrid: function() { 
    ...//get data from server in sorted order 
    var mystore = new Memory({data: sortedDataFromServer, idProperty: 'id'}); 
    mygrid.set("collection", mystore); 
    ... 
} 

Memory здесь "dstore/Memory". Я использую dgrid 0.4,dstore 1.1 и dojo 1.10.4

Перед вызовом set('collection',...) я вижу, что sortedDataFromServer находится в нужном порядке сортировки. Но по какой-то причине порядок в сетке отличается. Например, при сортировке в порядке убывания, я вижу, что значения, начинающиеся с нижнего регистра, появляются сначала в порядке убывания, а затем значения, начинающиеся с верхнего регистра, отображаются в отсортированном порядке. Похоже, dstore делает что-то большее.

Что может быть? Я делаю что-то неправильно? Есть ли другой/лучший способ сделать обычную сортировку?

Спасибо,

ответ

1

Это, как я в конечном итоге решение ситуации - Как и предполагалось, коллекция/магазин был дальнейшей сортировки мои данные и, следовательно, несоответствие. Я настроил хранилище (Память), как показано ниже, и использую специализированное хранилище при настройке данных на мою сетку.

var CustomGridStore = declare([Memory],{ 
    sort: function (sorted) { 
     sorted = [];//Prevent the collection from sorting the data 
     return this.inherited(arguments); 
    } 
}); 
0

Я думаю, что вы делаете правильно, только проблема в том, что вы не сброс сортировки свойства сетки, который вы повторно инициировать память с упорядоченномом, это получить пользователь автоматически сортируются

после вы звоните

event.preventDefault(); 

вызов этого

mygrid.set("sort", null); 

Я делаю пользовательскую сортировку в моей одной из сетки следующим

   self.xrefGrid.on("dgrid-sort", function (event) { 
       var sort = event.sort[0]; 
        event.preventDefault(); 
        self.xrefGrid.set('sort', function (a, b) { 
         var aValue,bValue; 
         if (a[sort.attribute] && typeof a[sort.attribute] == "string") 
          aValue = a[sort.attribute].toLowerCase(); 
         if (b[sort.attribute] && typeof b[sort.attribute] == "string") 
          bValue = b[sort.attribute].toLowerCase(); 
         var result = aValue > bValue ? 1 : -1; 
         return result * (sort.descending ? -1 : 1); 
        }); 
        self.xrefGrid.updateSortArrow(event.sort, true); 
      }); 
+0

Не работает. Получил это - 'TypeError: sort is null Grid.js: 379: 7' ' TypeError: grid.sort is null. Обратите внимание, что я вызываю 'mygrid.updateSortArrow (event.sort, true);', чтобы показать отсортированный индикатор в пользовательском интерфейсе. – ksrini

+0

он должен работать, я делаю сортировку в одной моей сетке, см. Пример выше – Shahzad