以下是我尝试使用的代码(从远程json中提取的部件,从自定义数据显示中删除的部件):
$(function () {
$("#Field1Text").autocomplete({
minLength: 0,
source: function (request, response) {
$.ajax({
url: "/Main/Users/GetItems",
dataType: "json",
data: {
group: "Default",
query: request.term
}
},
focus: function (event, ui) {
$("#Field1Text").val(ui.item.Description);
return false;
},
select: function (event, ui) {
$("#Field1Text").val(ui.item.Description);
return false;
}
})
.data("autocomplete")._renderItem = function (ul, item) {
return $("<li>")
.data("item.autocomplete", item)
.append("<a><strong>" + item.Description + "</strong><br>" + item.Section + " - " + item.Type + " - " + item.Name + "</a>")
.appendTo(ul);
};
});
数据拉回正常,但渲染项功能永远不会触发。我已经废弃了渲染项目版本并使用了成功:源代码内部它看起来像这样:
success: function (data) {
response($.map(data, function (ul, item) {
return $("<li>")
.data("item.autocomplete", item)
.append("<a><strong>" + item.Description + "</strong><br>" + item.Section + " - " + item.Type + " - " + item.Name + "</a>")
.appendTo(ul);
}));
}
我使用了firebug,我能够在响应部分找到一个断点:如果我查看数据中的数据,它看起来像:
[ Object { ...data... }, Object { ...data... }]
如果我在成功部分的.data
行设置了一个断点,我看到ul是其中一个对象( looks like " Object { ... data ... }")
此时item元素为0,当我尝试渲染<a>
标记时,它在所有属性上显示为Undefined(可理解,看起来将项目对象视为{{ 1}})。
如何正确处理该组件?
编辑:对不起,我想根据评论中的建议添加一个jsFiddle,但家里的东西还在继续。
我评论的代码类似于我们在工作中使用的代码。不幸的是,Web应用程序是一个内部的应用程序,其数据库未连接到外部世界,因此我无法使用实时数据。 testResults对象就是我在成功中看到的:section的数据元素。
我实际上能够获得成功部分,但我不相信我正确使用jQuery UI / Autocomplete(至少我的假设),因为我能够查看ul.Properties并查看实际数据。附加使用虚假数据的项目,但是当我尝试将成功块复制并粘贴到渲染项目时,所有数据都是未定义的。我也找不到那个阶段的一对一映射(ul是页面上的元素,item只是[li])。