gpt4 book ai didi

jQuery UI 自动完成自定义对象作为源而不是字符串数组

转载 作者:行者123 更新时间:2023-12-03 22:49:02 28 4
gpt4 key购买 nike

我正在使用 JQueryUI Autocomplete,并且想知道如何使用自定义对象作为我的数据源(即我想传回以下类型的列表):

public class Tag
{
public string Name { get; set; }
public int Count { get; set; }
}

我当前使用的自动完成代码(当我传回直接的名称字符串数组时效果很好)几乎是 jQuery UI 站点的副本:

$(function () {
function split(val) {
return val.split(/ \s*/);
}
function extractLast(term) {
return split(term).pop();
}

$("#tags")
// don't navigate away from the field on tab when selecting an item
.bind("keydown", function (event) {
if (event.keyCode === $.ui.keyCode.TAB &&
$(this).data("autocomplete").menu.active) {
event.preventDefault();
}
})
.autocomplete({
source: function (request, response) {
$.getJSON("Home/GetTag", {
term: extractLast(request.term)
}, response);
},
search: function () {
// custom minLength
var term = extractLast(this.value);
if (term.length < 1) {
return false;
}
},
focus: function () {
// prevent value inserted on focus
return false;
},
select: function (event, ui) {
var terms = split(this.value);
// remove the current input
terms.pop();
// add the selected item
terms.push(ui.item.value);
// add placeholder to get the comma-and-space at the end
terms.push("");
this.value = terms.join(" ");
return false;
}
});
});

与原始演示源相比,我唯一改变的是网址,并且我用空格而不是逗号进行分割(用于多个自动完成)。

这是 HTML:

<div class="ui-widget">
<label for="tags">Tags: </label>
<input id="tags"/>
</div>

理想情况下,我想向用户呈现一个名称列表,并附有相应的计数。

最佳答案

how to use a custom object as my data source

您需要按照小部件期望的方式格式化数据。您必须有 label属性(property)或value结果数组中每个对象的属性(或两者),以便小部件显示结果。您可以在对象中包含其他数据,只要它满足这些要求即可。

要格式化从服务器返回的数据,惯例是使用 $.map :

source: function (request, response) {
$.getJSON("Home/GetTag", {
term: extractLast(request.term)
}, function (data) {
response($.map(data, function (item) {
return {
value: item.Name,
count : item.Count
};
});
});
},

(未经测试)

这应该会为您填充结果。这与您问题的第二部分密切相关:

Ideally, I want to present the user with a list of names, with corresponding count alongside.

这很容易完成,遵循 this demo作为指导:

$("#auto").autocomplete({ ... })
.data("autocomplete")._renderItem = function(ul, item) {
return $("<li>")
.data("item.autocomplete", item)
.append("<a>" + item.label + "<br />" + item.count + "</a>")
.appendTo(ul);
};

您可以覆盖 _renderItem函数可以显示任何你想要的内容,只要它是 li其中包含 a标签并有数据 item.autocomplete .

将这两种策略结合起来,您就可以开展业务了。有关此操作的示例,请查看此处的示例:http://jsfiddle.net/andrewwhitaker/UvegL/

此示例结合了远程数据源和自定义数据和显示。尽管 AJAX 调用有点不同,但希望它能有所帮助。

关于jQuery UI 自动完成自定义对象作为源而不是字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7012054/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com