Tôi đang cố gắng hiểu sự khác biệt giữa renderItem
và renderItemData
.Sự khác biệt giữa hàm renderItem của jQuery tự động hoàn thành và renderItemData
Tôi không thể tìm thấy tài liệu liên quan về điều này.
tôi có mã sau đây:
$.widget("custom.catcomplete", $.ui.autocomplete, {
_renderMenu: function(ul, items) {
var that = this,
currentCategory = "";
$.each(items, function(index, item) {
if (item.category != currentCategory) {
ul.append("<li class='ui-autocomplete-category'>" + item.category + "</li>");
currentCategory = item.category;
}
// with following code, when an element is selected
// in menu list, the corresponding value appears in searchbox
that._renderItemData(ul, item);
// with following code, when an element is selected
// in menu list, the corresponding value does NOT appear in searchbox
// I override renderItem below
**// that._renderItem(ul, item);**
});
}
});
function handleSearchBox() {
var data = [
{ label: "JAMES", category: "PEOPLE" },
];
$("#search").catcomplete({
delay: 0,
source: data,
select: function(event, ui) {
event.preventDefault();
str = JSON.stringify(ui)
// with renderItemData, str = item in source data
// with renderItem str = {}
alert(str)
var selectedObj = ui.item.label
$("#search").val(selectedObj);
}
});
$("#search").data("custom-catcomplete")._renderItem = function(ul, item) {
return $("<li></li>").data("item.autocomplete", item)
.append("<a>" + item.label + "</a>")
.appendTo(ul);
};
}
Mục tiêu của tôi là để phong cách tùy chỉnh các mục menu li. Tôi không chắc mình đang đi sai đâu.
'renderItem' là một phương pháp, ' renderItemData' là một đối tượng. Bạn không cần phải tương tác với 'renderItemData'. – Anthony
Tôi đã thêm giải thích dưới đây, nếu bạn chỉ muốn sử dụng _renderItem thì bạn cần đặt dữ liệu là 'ui-autocomplete-item' chứ không phải' item.autocomplete' –
Tôi nghĩ tôi đã làm việc đó. Tôi đang cố gắng để hiểu nó nhiều hơn/tốt hơn. Tôi sẽ sớm chấp nhận câu trả lời. cảm ơn rất nhiều. điều này có ích – GJain