防止Selectize自动分拣

时间:2013-12-10 23:17:52

标签: javascript jquery list selectize.js

我有一个从WebService提供的对象数组(列表的顺序很重要)。我将JSON对象加载到Selectize控件中,但它重新排序列表而不使用对象的顺序。

这是当前问题的链接。

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

在这里小提琴:http://jsfiddle.net/LYYab/

我已禁用'sortField'但它不起作用。

非常感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:12)

您的sortField可能如下所示:

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

确保覆盖sortField包含特殊的$score字段。否则,根据文档,它将被添加到所有其他字段的前面,从而有效地覆盖提供的订单。

答案 1 :(得分:8)

出于某种原因,我假设您在将数据传递给Selectize之前无法访问数据。如果您这样做,您只需添加排序索引:

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

然后使用sortField: 'sId'在Selectize选项中引用它。

小提琴here

当然只有在文本框中有人输入时才会有效,然后顺序基于所输入短信的“最佳匹配”。如果您在有人打字时必须保留订单,则需要定义自己的score函数 - 您需要一个返回函数的函数。内部函数采用项目和当前查询,如果项目匹配则需要返回sId以保留订单,否则返回0.

请参阅documentation回调下的score