Предотвращение выбора автоматической сортировки

У меня есть массив объектов, которые предоставляются из WebService (порядок списка важен). Я загрузил объект JSON в элемент Selectize, но он переупорядочивает список без использования порядка объекта.

Это ссылка на текущую проблему.

$('#testSelect').selectize({
    maxItems: 1,
    valueField: 'Id',
    labelField: 'Descripcion',
    searchField: 'Descripcion',
    options: data
});

Заклинание здесь: http://jsfiddle.net/LYYab/

Я отключил 'sortField', но он не работает.

Любая помощь будет принята с благодарностью.

Спасибо.

Ответы

Ответ 1

Ваш sortField может выглядеть так:

sortField: [{field: 'Descripcion', direction: 'desc'}, {field: '$score'}]

Убедитесь, что параметр overriden sortField содержит специальное поле $score. В противном случае, согласно документации, он будет добавлен перед всеми другими полями, эффективно перекрывая предоставленный заказ.

Ответ 2

По какой-то причине я предположил, что у вас не было доступа к данным, прежде чем он был передан Selectize. Если вы это сделаете, вы можете просто добавить индекс сортировки:

var currentSortId = 0;    
$.each(data, function(i, v) { 
    currentSortId = currentSortId + 1; // First ID is 1!
    v.sId = currentSortId;
});

а затем укажите, что в параметрах Selectize с sortField: 'sId'.

Fiddle здесь

Конечно, это работает только до тех пор, пока кто-то не введет в текстовое поле, тогда порядок будет основан на том, что "наилучшее соответствие" для текстового ввода. Если вы должны сохранить заказ, когда кто-то печатает, вам нужно будет определить свою собственную функцию score - вам понадобится функция, которая возвращает функцию. Внутренняя функция принимает и элемент и текущий запрос и должна возвращать sId, чтобы сохранить порядок, если элемент соответствует, в противном случае возвращает 0.

См. score под обратными вызовами в документации.