2013-12-10 84 views
14

我有一個從WebService提供的對象數組(該列表的順序很重要)。我將JSON對象加載到了Selectize控件中,但是它重新排列列表而不使用對象的順序。防止選擇自動排序

這是當前問題的鏈接。

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

小提琴這裏:http://jsfiddle.net/LYYab/

我已禁用 '的SortField',但它不工作。

任何幫助將不勝感激。

謝謝。

+0

我假設你是指默認順序,當你第一次得到下拉?而不是一旦你在盒子裏輸入什麼東西?一旦你編輯了一些東西,它會對「最佳」匹配進行排序。可悲的是,我並不確定有可能這樣做,因爲這不是Selectize的目的。 – SpaceDog

+0

我的意思是dropwdown建議立即進行刪除是這樣的: - 託多斯 - Armtas - Comtrek - Earthwax - Flotonic 這是JSON對象的順序。 – eliashdezr

+1

更新:這種情況的一個簡單的解決方案:在我想要在頂部的單詞之前添加一個空格。 – eliashdezr

回答

8

出於某種原因,我認爲您在傳遞給Selectize之前無法訪問數據。如果你這樣做,你可以再補充一個排序索引:

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

,然後引用,在Selectize選項與sortField: 'sId'

小提琴here

當然,這只是工作,直到在文本框中有人類型,那麼順序是根據什麼是對發短信輸入的「最佳匹配」。如果您在輸入內容時必須保留訂單,則需要定義您自己的score函數 - 您需要一個返回函數的函數。內部功能需要和項目,目前的查詢,需要返回sId如果與項目匹配以保持秩序,否則返回0

score回調documentation

+1

由於某種原因,selectize默認的排序,應該是按字母順序排列,隨機放置一些不符合字母順序的頂級項目。這解決了我的問題。 – Mahn

10

sortField看起來是這樣的:

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

確保重寫sortField包含特殊$score領域。否則,根據文檔,它將被添加到所有其他字段的前面,從而有效地覆蓋所提供的訂單。

+0

歡呼@mrt讓我的一天成爲這個片段! – fearis