我想使用jquery-select2,但我返回具有不同結構的json對象。 我沒有id
和text
財產,但Code
和Description
。遠程數據:具有不同屬性的結果對象。如何映射?
<input type="hidden" id="select2Test" name="select2Test" value=""/>
這一個我的JSON對象:
[{"Code":"20900","Description":"LONDON"}]
我發現在互聯網上的一些示例代碼(和閱讀文檔),但我似乎並沒有能夠使它發揮作用。 這是我的javascript:
$("#select2Test").select2({
placeholder: "Search City",
minimumInputLength: 2,
multiple: false,
quietMillis: 5000,
id: function (item) { return { id: item.Code }; },
ajax: {
url: '/Services/FetchCities',
dataType: 'json',
type: "POST",
data: function (term, page) { return { city: term }; },
results: function (data, page) {
return { results: data };
}
},
// initSelection: function (item, callback) {
// var data = { id: item.Code(), text: item.Description() };
// callback(data);
// },
formatResult: function (item) { return ('<div>' + item.Code + ' - ' + item.Description + '</div>'); },
formatSelection: function (item) { return (item.Description); },
escapeMarkup: function (m) { return m; }
}).on("change", function() {
var $this = $(this);
alert($this.val());
});
我在這裏映射我的唯一關鍵:
id: function (item) { return { id: item.Code }; },
格式化我這裏的結果:
formatResult: function (item) { return ('<div>' + item.Code + ' - ' + item.Description + '</div>'); },
這裏設置選擇:
formatSelection: function (item) { return (item.Description); },
到現在爲止還挺好。一切似乎工作,除非當我嘗試讀取或張貼值我只是得到一個奇怪的結果:[object Object]
。 我想這事做的結果功能:
results: function (data, page) {
return { results: data };
}
,但我不是100%肯定。
PS:如果我使用ID和文本更改我返回的json對象,一切正常,但我不能這樣做,導致我的代碼的其他部分使用不同的引用。
任何幫助,將不勝感激。
UPDATE
我已經找到了解決方案的數據映射對象:
results: function (data, page) {
return {
results: $.map(data, function (item) {
return {
id: item.Code,
text: item.Description
};
})
};
}
這個變化我並不需要設置id屬性:
// id: function (item) { return { id: item.Code }; },
和formatResult
和formatSelection
formatResult: function (item) { return ('<div>' + item.id + ' - ' + item.text + '</div>'); },
formatSelection: function (item) { return (item.text); },
不需要改變。
我在想這是不是最好的選擇。
您是否還需要'data:function(term,page){return {city:term};一旦你在'results'中使用了映射,你的代碼中的'','','? – Marklar
是的,你需要這個,因爲我正在發送城市參數給我的行爲。 – LeftyX