2016-08-23 10 views
0

В настоящее время я использую пользовательскую функцию сортировки на dgrid (вставленную ниже). Он не меняет сортировку резко, просто сортирует один конкретный столбец однозначно и сортирует другие регистро-независимые. Я хотел бы добавить вторичный сортировку по столбцу с именем «запланировано», который будет добавлен в сортировку, когда будет отсортирован любой другой столбец. Я просто не знаю, как это сделать. Я видел, как переопределить сортировку для сортировки по двум столбцам, но не тогда, когда пользовательский сортировка находится в игре. Вторичная сортировка всегда будет там, неважно, какой другой столбец щелкнут.dgrid custom sort со вторичным столбцом сортировки

Для справки Я запускаю додзё 1.10 и dgrid 1.0. Данные поступают из хранилища RequestMemory DStore, и я бы предпочел, чтобы этот вид произошел на сетке, а не на уровне магазина. Любая помощь будет оценена по достоинству.

currGrid.on('dgrid-sort', function (event) { 
 
    event.preventDefault(); 
 
    var sort = event.sort[0]; 
 
    currGrid.set('sort', function (a, b) { 
 
    if (sort.property == "thisField") { 
 
     //special sort for thisField 
 
     if (a[sort.property] !== 'undefined' && typeof a[sort.property] == "string") { 
 
      var colorA = a[sort.property].split("|"); 
 
      var aValue = colorA[0].toLowerCase(); 
 
     } 
 
     if (b[sort.property] !== 'undefined' && typeof b[sort.property] == "string") { 
 
      var colorB = b[sort.property].split("|"); 
 
      var bValue = colorB[0].toLowerCase(); 
 
     } 
 
     if (String(aValue) == String(bValue)) { 
 
      var result = 0; 
 
     } else if (dojo.string.trim(aValue) == "") { 
 
      var result = true ? 1 : -1; 
 
     } else if (dojo.string.trim(bValue) == "") { 
 
     var result = true ? -1 : 1; 
 
     } else { 
 
     var result = aValue > bValue ? 1 : -1; 
 
     } 
 
     return result * (sort.descending ? -1 : 1); 
 
    } else { 
 
     //Sort for all other fields same as always (except toLowerCase) 
 
     if (a[sort.property] !== 'undefined' && typeof a[sort.property] == "string") { 
 
      var aValue = a[sort.property].toLowerCase(); 
 
     } else { 
 
      var aValue = ""; 
 
     } 
 
     if (b[sort.property] !== 'undefined' && typeof b[sort.property] == "string") { 
 
      var bValue = b[sort.property].toLowerCase(); 
 
     } else { 
 
      var bValue = ""; 
 
     } 
 
     var result = aValue > bValue ? 1 : -1; 
 
     return result * (sort.descending ? -1 : 1); 
 
    } 
 
    }); 
 
    currGrid.updateSortArrow(event.sort, true); 
 
}); 
 
currGrid.startup();

ответ

0

Вы могли бы сделать что-то, как показано ниже.

currGrid.on('dgrid-sort', function (event) { 
    event.preventDefault(); 
    var sortSet = []; 
    sortSet.push(event.sort[0]); 
    sortSet.push({property: "scheduled"}); 
    currGrid.set('sort', function (a, b) { 
     var aValue, bValue, result = 0; 
     for(var i = 0; i < sortSet.length; i++){ 
      var sort = sortSet[i]; 
      if (sort.property == "thisField") { 
       //special sort for thisField 
       if (a[sort.property] !== 'undefined' && typeof a[sort.property] == "string") { 
        var colorA = a[sort.property].split("|"); 
        aValue = colorA[0].toLowerCase(); 
       } 
       if (b[sort.property] !== 'undefined' && typeof b[sort.property] == "string") { 
        var colorB = b[sort.property].split("|"); 
        bValue = colorB[0].toLowerCase(); 
       } 
       if (String(aValue) == String(bValue)) { 
        result = 0; 
       } else if (dojo.string.trim(aValue) == "") { 
        result = true ? 1 : -1; 
       } else if (dojo.string.trim(bValue) == "") { 
        result = true ? -1 : 1; 
       } else { 
        result = aValue > bValue ? 1 : -1; 
       } 
       return result * (sort.descending ? -1 : 1); 
      } else { 
       //Sort for all other fields same as always (except toLowerCase) 
       if (a[sort.property] !== 'undefined' && typeof a[sort.property] == "string") { 
        aValue = a[sort.property].toLowerCase(); 
       } else { 
        aValue = ""; 
       } 
       if (b[sort.property] !== 'undefined' && typeof b[sort.property] == "string") { 
        bValue = b[sort.property].toLowerCase(); 
       } else { 
        bValue = ""; 
       } 
       //You need this check here 
       if(aValue != bValue){ 
        result = aValue > bValue ? 1 : -1; 
        return result * (sort.descending ? -1 : 1); 
       } 
      } 
     } 
     return 0; 
    }); 
    currGrid.updateSortArrow(event.sort, true); 
}); 
currGrid.startup(); 

У меня есть некоторые сомнения по поводу вашего кода, переменных result, aValue and bValue являются всеми местными внутри, если заявление и все же они используются за пределами заявления. Это может привести к неправильным результатам, если некоторые другие переменные определены с одним и тем же именем в глобальном пространстве. Поэтому я их модифицировал.

Так второй раздел вам нужно проверить, если aValue == bValue вернуть 0.

+0

@t Kambi Извините за задержку, возвращаясь к вам на это, я только что проверил это и он прекрасно работает на первом щелчке на сортировать любой столбец. Тем не менее, он меняет вид запланированного столбца, когда другой столбец сортируется в противоположном направлении. Я хочу, чтобы плановый (вторичный столбец сортировки) всегда поднимался. Я попытался изменить 'sortSet.push ({property:" schedule "});' to sortSet.push ({property: "schedule", descending: false}); и это не сделало этого. В моем первоначальном вопросе я, вероятно, не был ясно из этого, но если вы поможете мне разобраться, я бы очень признателен. – BLWedge09

+0

Сортировка расписания всегда возрастает, так как мы не устанавливаем нисходящее свойство для этой опции. Однако он будет иметь второй приоритет по сравнению с другим вариантом сортировки. Если вы хотите, чтобы «расписание» было вашим первым приоритетом, сначала добавьте расписание сортировки, а затем другой вид в «sortSet». –

+0

Да, вы совершенно правы. Столбец, который я нажал, содержал скрытые в нем данные, которые вызывали сортировку по-другому, чем я планировал. Все работает так, как сейчас. Спасибо @T Kambi – BLWedge09

 Смежные вопросы

  • Нет связанных вопросов^_^