防止Selectize自动分拣

eli*_*ezr 15 javascript jquery list selectize.js

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

这是当前问题的关联.

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

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

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

任何帮助将不胜感激.

谢谢.

mrt*_*mrt 13

sortField可能看起来像这样:

sortField: [{field: 'Descripcion', direction: 'desc'}, {field: '$score'}]
Run Code Online (Sandbox Code Playgroud)

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


Spa*_*Dog 9

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

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

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

在这里小提琴

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

参见score回调的文档.

  • 由于某种原因,默认的selectize排序(应该是按字母顺序排列)会随机放置一些与人们期望的字母顺序不一致的top项。这为我解决了这个问题。 (2认同)