选择 2 和 JSON 数据

Select2 and JSON Data

我正在使用 select2 版本 4,我在 XPage 上有一个 REST 服务控件,它从 names.nsf.

中读取全名列

我可以进行搜索,但由于某种原因,我没有得到返回的值列表 select。

正在 returned 的 JSON 对象看起来像这样:

[{"@entryid":"1376-E6D5EBE8ADBEFA7088257DF8006E4BA2","fullname":"Full Name\/OU\/O"},{"@entryid":"1375-FD1CB92A13BFD0E088257DE4006756D7","fullname":"Another Full Name\/OU\/O"}]

初始化 select2 的代码如下所示:

x$( "#{id:comboBox1}" ).select2({
  ajax: {
   url: "xJSON.xsp/names",
   dataType: 'json',
   delay: 250,
    data: function (params) {
      return {
      search:'[fullname=]*'+params.term+'*',       
      //  q: params.term, // search term
        page: params.page
      };
    },

    results: function (data, page){

    },
    processResults: function (data, page) {
      // parse the results into the format expected by Select2.
      // since we are using custom formatting functions we do not need to
      // alter the remote JSON data
      console.log(data);
      return {
        results: data
      };
    },
    cache: true
  },
  //escapeMarkup: function (markup) { return markup; }, 
  minimumInputLength: 1
});

当我查看浏览器的控制台时,我可以看到搜索有效并且 JSON 对象正在 returned,但是,我没有得到 [=] 的值列表33=] 来自.

对于结果 return 我试过结果:data.fullname 和结果:数据,文本:'fullname' 但没有任何反应。

我在做什么?

您需要将您的 JSON 响应切换为包含每个对象的 idtext,或者在您的 processResults 方法中重新映射它们。 These two properties are required 现在在 Select2 4.0 中的所有可选对象上。由于我假设您无法更改 JSON 响应,或者它没有意义,您可以使用以下 processResults 方法轻松地重新映射数据。

processResults: function (data) {
  var data = $.map(data, function (obj) {
    obj.id = obj.id || obj["@entityid"];
    obj.text = obj.text || obj.fullname;

    return obj;
  });

  return {
    results: data
  };
});

这会将 @entityid 属性 映射到 id 属性 并将 fullname 属性 映射到 text 属性。因此选择将发送到包含 @entityid 的服务器,并将使用 fullname.

显示

此外,Select2 4.0 中不再需要 results 方法。这已重命名为当前的 processResults 方法。

我原封不动地复制了您的代码,只是更改了 fieldname 和搜索查询,结果很好。

这是我的JSON样子

[{"@entryid":"1482-AD112B834158AD0D80257E4B004EC42E","@unid":"AD112B834158AD0D80257E4B004EC42E","id":"Victor Hunter","text":"Odhran Patton"},{"@entryid":"1496-291F2480D806A91E80257E4B004EC3D2","@unid":"291F2480D806A91E80257E4B004EC3D2","id":"Wesley O'Meara","text":"Wesley O'Meara"},{"@entryid":"1421-CC19D06880F5DC2980257E4B004EC537","@unid":"CC19D06880F5DC2980257E4B004EC537","id":"Stephen Woods","text":"Emma Doherty"}]

我所知道的是 select2 期望 idtext来自 JSON.

的参数