2013-12-10 10 views
14

Ich habe ein Array von Objekten, die von einem WebService bereitgestellt werden (die Reihenfolge der Liste ist wichtig). Ich habe das JSON-Objekt in ein Selectize-Steuerelement geladen, aber es ordnet die Liste neu an, ohne die Reihenfolge des Objekts zu verwenden.Verhindern Selektiere automatisches Sortieren

Dies ist die Verknüpfung des aktuellen Problems.

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

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

Ich habe die 'sortField' deaktiviert, aber es funktioniert nicht.

Jede Hilfe würde sehr geschätzt werden.

Danke.

+0

Ich nehme an, dass Sie die Standardreihenfolge meinen, wenn Sie das Dropdown zuerst erhalten? Anstatt einmal etwas in die Box einzugeben? Sobald Sie etwas bearbeitet haben, wird es die "besten" Übereinstimmungen sortieren. Leider bin ich mir nicht sicher, ob das möglich ist, weil es nicht das ist, wofür Selectize ist. – SpaceDog

+0

Ich meine, dass die dropwdown so etwas wie dieses shoul: - Todos - Armtas - Comtrek - Earthwax - Flotonic , dass die Reihenfolge des JSON-Objekt ist. – eliashdezr

+1

UPDATE: Eine einfache Lösung für diesen Fall: Fügen Sie ein Leerzeichen vor dem Word, das ich oben sein möchte. – eliashdezr

Antwort

8

Aus irgendeinem Grund nahm ich an, dass Sie keinen Zugriff auf die Daten hatten, bevor sie an Selectize übergeben wurden. Wenn Sie das tun können Sie nur eine Art Index hinzufügen:

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

und dann verweisen, dass in den Selectize Optionen mit sortField: 'sId'.

Fiddle here

Natürlich, die bis jemand Typen in das Textfeld nur funktioniert, dann wird der Auftrag auf das, was für den eingegebenen getextet die ‚beste Übereinstimmung‘ ist. Wenn Sie die Reihenfolge beibehalten müssen, wenn jemand schreibt, müssen Sie Ihre eigene score-Funktion definieren - Sie benötigen eine Funktion, die eine Funktion zurückgibt. Die innere Funktion nimmt und Artikel und die aktuelle Abfrage und muss die sId zurückkehren, den Auftrag zu erhalten, wenn das Element, da sie sonst 0 zurück

Siehe score unter Rückrufe im documentation.

+1

Aus irgendeinem Grund die Standardsortierung von selectize, die alphabetisch sein soll, zufällig einige Elemente von oben, die nicht mit der alphabetischen Reihenfolge entsprechen würde erwarten würde. Das hat das Problem für mich gelöst. – Mahn

10

Ihre sortField könnte wie folgt aussehen:

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

Achten Sie darauf, die außer Kraft gesetzt sortField die besondere $score Feld enthält. Ansonsten wird es gemäß der Dokumentation vor allen anderen Feldern hinzugefügt, die den bereitgestellten Auftrag effektiv überschreiben.

+0

Cheers @mrt machen meinen Tag dieses Schnipsel! – fearis

Verwandte Themen