选择 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 响应切换为包含每个对象的 id
和 text
,或者在您的 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
期望 id
和 text
来自 JSON
.
的参数
我正在使用 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 响应切换为包含每个对象的 id
和 text
,或者在您的 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
期望 id
和 text
来自 JSON
.