2013-12-10 8 views
14

Ho una matrice di oggetti fornita da un WebService (l'ordine della lista è importante). Ho caricato l'oggetto JSON in un controllo Selectize ma riordina l'elenco senza utilizzare l'ordine dell'oggetto.Previene la selezione dell'ordinamento automatico

Questo è il collegamento del problema corrente.

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

Fiddle qui: http://jsfiddle.net/LYYab/

Ho disabile la 'SortField', ma non funziona.

Qualsiasi aiuto sarebbe molto apprezzato.

Grazie.

+0

Suppongo che intendi l'ordine predefinito quando si visualizza il menu a discesa? Piuttosto di una volta hai inserito qualcosa nella scatola? Una volta che hai modificato qualcosa, ordina le partite migliori. Purtroppo non sono sicuro che sia possibile farlo perché non è quello che è per Select. – SpaceDog

+0

voglio dire che il dropwdown shoul essere qualcosa di simile: - Todos - Armtas - Comtrek - Earthwax - Flotonic Questo è l'ordine del oggetto JSON. – eliashdezr

+1

AGGIORNAMENTO: una soluzione semplice in questo caso: aggiungere uno spazio bianco prima della parola che voglio essere in cima. – eliashdezr

risposta

8

Per qualche motivo ho pensato che non avessi accesso ai dati prima di passare a Selectize. Se lo fai si può semplicemente aggiungere un indice sorta:

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

e quindi fare riferimento che nelle opzioni Selectize con sortField: 'sId'.

Fiddle here

Certo che funziona solo fino a quando qualcuno digita nella casella di testo, l'ordine si basa su ciò che è la 'migliore corrispondenza' per il mandato un messaggio digitato. Se devi conservare l'ordine quando qualcuno sta scrivendo, dovrai definire la tua funzione score - avrai bisogno di una funzione che restituisca una funzione. La funzione interna prende e voce e la query corrente e deve restituire il sId di preservare l'ordine se l'oggetto corrisponde, altrimenti restituisce 0.

Vedi score sotto callback nel documentation.

+1

Per qualche motivo l'ordinamento predefinito di selectize, che dovrebbe essere alfabetico, mette in modo casuale alcuni elementi che non corrispondevano all'ordine alfabetico che ci si aspetterebbe. Questo ha risolto il problema per me. – Mahn

10

tuo sortField potrebbe assomigliare a questo:

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

Assicurarsi che il sovresposta sortField contiene lo speciale $score campo. In caso contrario, come da documentazione, verrà aggiunto di fronte a tutti gli altri campi che annullano effettivamente l'ordine fornito.

+0

Cheers @mrt rendono il mio giorno questo frammento! – fearis

Problemi correlati