我正在尝试使用 jquery-select2 但我返回具有不同结构的 json 对象。我没有id
andtext
属性但是Code
and Description
。
<input type="hidden" id="select2Test" name="select2Test" value=""/>
这是我的 json 对象:
[{"Code":"20900","Description":"LONDON"}]
我在 Internet 上找到了一些示例代码(并阅读了文档),但我似乎无法使其工作。这是我的 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 和 text 更改返回的 json 对象,一切正常,但我不能这样做,因为我的代码的其他部分使用不同的引用。
任何帮助,将不胜感激。
更新
我找到了映射数据对象的解决方案:
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); },
不需要改变。
我想知道这是否是最好的选择。