sks*_*laj 2 jquery json jquery-select2
因此,我一直在将select2用于非ajax查询,到目前为止,它一直非常有用。但是,我想对ajax json响应使用下拉菜单之一。在整篇文档中,几乎没有任何提示可以显示如何使用它。
整体文件:http://ivaynberg.github.io/select2/
除了要压缩的代码示例之外,几乎没有任何html代码或json示例,我现在正茫然无措。
所以这是我得到的一个json:
[{“ ST_CD”:“ NY”,“ ST_SHRT_NM”:“纽约”},{“ ST_CD”:“ NY”,“ ST_SHRT_NM”:“纽约1”}]
这是很标准的。我在文档中注意到,您需要映射一个“ id”和一个“文本”才能使它起作用。不知道为什么我不能照原样做,但是几乎没有任何文档。
https://groups.google.com/forum/#!topic/select2/rDPFU0IWpE0
select2的作者提到了以下关键事实:
您需要在选项中提供id函数,因为您的id键是“ Id”而不是“ id”。
您还需要提供formatResult和formatSelection选项,因为您没有“文本”键。
在这里遇到相同问题的用户:https : //github.com/ivaynberg/select2/issues/693 也表明这是正确的。
但是,这对我没有用。
$(document).ready(function () {
$("#e6").select2({
id: function(e) { return e.ST_CD },
placeholder: "Search for a movie",
minimumInputLength: 1,
ajax: {
url: "api/VendorLocation",
dataType: 'json',
data: function (term, page) {
return {};
},
results: function (data, page) {
return { results: data };
},
formatResult: function (item) { return item.ST_SHRT_NM; },
formatSelection: function (item) { return item.ST_SHRT_NM; }
}
});
});
Run Code Online (Sandbox Code Playgroud)
在ajax函数的结果部分的返回中,数据对象已正确填充。它具有我需要的数据(ST_CD和ST_SHRT_NM具有适当的值),当我继续操作时,即发生错误时。无论是否存在formatResult和formatSelection,都会出现相同的错误。
所以我调试到Select2,这是错误出现的地方:
$.fn.select2.defaults = {
(...)
formatResult: function (result, container, query, escapeMarkup) {
var markup = [];
markMatch(result.text, query.term, markup, escapeMarkup);
return markup.join("");
},
(...)
}
Run Code Online (Sandbox Code Playgroud)
在此代码中,将填充结果对象,但未定义text属性。
我认为格式化我的json数据以符合前端html控件的标准或进行任何类型的json解析确实是不合理的。如果有一种方法select2可以允许我明确指定文本和id部分,那么我想看看它还是知道我在做什么错。
自从我问这个问题已经有一段时间了,但是我问了一个星期后就提出了一个解决方案。因此,我决定立即回答。.刚刚创建了一个DTO,它映射到EF使用linq创建的实际实体:
因此在服务器端:
public class StateDTO
{
public string id { get; set; }
public string text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后在发送回之前被命中的查询
//the context is generated from EF
public IQueryable<StateDTO> Get(string st_name)
{
return (
from state in this.context.States
where state.ST_SHRT_NM.Contains(st_name)
select new StateDTO() { id = state.ST_CD,
text = state.ST_SHRT_NM,
});
}
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:[{“ id”:“ NY”,“ text”:“ New York”},{“ id”:“ NY”,“ text”:“ New York1”}]
由于我已经设置了select2配置,因此之后它可以工作了:
$(document).ready(function () {
$("#e6").select2({
placeholder: "Search for a movie",
minimumInputLength: 1,
ajax: {
url: "api/States",
dataType: 'json',
data: function (term, page) {
return {};
},
results: function (data, page) {
return { results: data };
}
}
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6018 次 |
| 最近记录: |