将select2与没有名为“text”的字段的json数据一起使用,同时避免复制项目并丢失标准行为

时间:2014-01-12 04:29:12

标签: jquery-select2

我正在使用select2,我想为所呈现项目的text属性设置自定义字段,而不是

  • 替换标准行为(标记等)
  • 将我的所有数组推入一个带有文本字段的新数组
    • ps:我只想渲染许多没有text字段的select2项目

基本上,如果您看到this jsbin,您会看到类似的内容

$("#e10_3").select2({
    data:{ results: data, text: function(item) { return item.tag; } },
    formatSelection: format,
    formatResult: format
});

但是如果我删除select2的自定义formatSelection和formatResult参数,我就无法使用text的其他字段。

2 个答案:

答案 0 :(得分:2)

我建议采用这种方法

$("#e10_3").select2({
    data:{
        results:  function (data) {
            return {
                results: $.map(data, function (item) {
                    return {
                        text: item.tag,
                        id: item.id
                        ...
                    }
                })
            };
        }
    },
    formatSelection: format,
    formatResult: format
});

答案 1 :(得分:1)

如前所述,此解决方案可以创建一个新阵列,但考虑到可读性,它似乎是一种更好的方法。在传递数据之前,您应该修改它。您可以在official docs

中看到这一点
var data = $.map(yourArrayData, function (obj) { 
   obj.text = obj.text || obj.name; // desired field
   return obj;
});

唯一的另一个选择是从一开始就准备与所需属性匹配的text属性的数据。

更新(添加示例)

$('your-select2-el').select2
  data: $.map(yourArrayData, (obj) ->
    obj.text = obj.your_custom_field_name # obj.title or obj.name etc.
    obj
  )

请参阅我之前提供的链接中的文档和this one