【问题标题】:Prevent Selectize automatic sorting防止 Selectize 自动排序
【发布时间】:2013-12-28 17:36:59
【问题描述】:

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

这是当前问题的链接。

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

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

我已禁用“sortField”,但它不起作用。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 我假设您的意思是您第一次获得下拉菜单时的默认顺序?而不是一旦你在框中输入了一些东西?一旦你编辑了一些东西,它就会对“最佳”匹配进行排序。可悲的是,我实际上不确定是否可以这样做,因为这不是 Selectize 的用途。
  • 我的意思是下拉菜单应该是这样的: - Todos - Armtas - Comtrek - Earthwax - Flotonic 这就是 JSON 对象的顺序。
  • 更新:这种情况的一个简单解决方案:在我想放在顶部的单词之前添加一个空格。
  • 是否没有系统且简单的方法来禁用此小部件中的排序?太荒谬了...解决方法都是黑客...

标签: javascript jquery list selectize.js


【解决方案1】:

您的sortField 可能如下所示:

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

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

【讨论】:

  • 干杯 @mrt 让我的一天成为 sn-p !
【解决方案2】:

出于某种原因,我假设您在将数据传递给 Selectize 之前无权访问这些数据。如果你这样做,你可以添加一个排序索引:

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

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

小提琴here

当然,这仅在有人在文本框中键入之前有效,然后顺序基于文本键入的“最佳匹配”是什么。如果您必须在有人键入时保留顺序,则需要定义自己的 score 函数——您需要一个返回函数的函数。内部函数接受和 item 和当前查询,如果 item 匹配则需要返回 sId 以保留顺序,否则返回 0。

请参阅documentation回调 下的score

【讨论】:

  • 由于某种原因,selectize 的默认排序应该是按字母顺序排列的,它随机放置了一些不符合预期字母顺序的顶部项目。这为我解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
相关资源
最近更新 更多