2 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個贊
更新:我添加了更多背景和對文檔的引用,并將 JSFiddle 切換為$.map()像文檔一樣使用。
Select2 數(shù)據(jù)格式在文檔中進(jìn)行了描述:
Select2 需要一種非常具體的數(shù)據(jù)格式 [...] Select2 要求每個對象都包含一個id和一個text屬性。[...] Select2value從id數(shù)據(jù)對象的屬性生成屬性...
文檔還描述了如何使用您以外的其他東西id:
id如果您使用(like )以外的屬性pk來唯一標(biāo)識選項(xiàng),則需要先將舊屬性映射到,id然后再將其傳遞給 Select2。如果您無法在服務(wù)器上執(zhí)行此操作,或者您處于無法更改 API 的情況,您可以在將其傳遞給 Select2 之前在 JavaScript 中執(zhí)行此操作
在您的情況下,這意味著轉(zhuǎn)換data您從 AJAX 調(diào)用返回的結(jié)果,以便id每個結(jié)果的元素實(shí)際上是text值。
您可以使用 AJAX 選項(xiàng)來做到這processResults()一點(diǎn)。使用$.map文檔來做到這一點(diǎn):
processResults: function (data) {
return {
// Transform data, use text as id
results: $.map(data, function (obj) {
obj.id = obj.text;
return obj;
})
};
}
這是一個有效的 JSFiddle。請注意,我已將其設(shè)置為使用 JSFiddle 的/echo/jsonasync 選項(xiàng)模擬您的真實(shí) AJAX 請求。
這是生成的源代碼的屏幕截圖,顯示了value添加的標(biāo)簽和通過 AJAX 檢索到的標(biāo)簽的名稱 ( text):

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個贊
嘗試這個:
ajax: {
url: '/tags/find',
dataType: 'json',
data: function (params) {
return {
q: $.trim(params.term)
};
},
//updated
processResults: function (data) {
var newData = [];
$.each(data, function (index, item) {
newData.push({
id: item.id, //id part present in data
text: item.text //string to be displayed
});
});
return { results: newData };
},
//
delay: 250,
cache: true
}
添加回答
舉報