Tôi có triển khai TypeAhead/Bloodhound trong giao diện người dùng, tìm nạp dữ liệu JSON từ máy chủ Play/Scala. Typeahead-phiên bản là 0.11.1. Việc thực hiện như sau:TypeAhead.js và Bloodhound hiển thị số lượng kết quả lẻ
HTML:
<div id="typeahead" class="col-md-8">
<input class="typeahead form-control" type="text" placeholder="Select the user">
</div>
JavaScript:
var engine = new Bloodhound({
datumTokenizer: function (datum) {
var fullName = fullName(datum);
return Bloodhound.tokenizers.whitespace(fullName);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
identify: function(obj) { return obj.id; },
remote: {
url: routes.controllers.Users.index("").url,
cache: false,
replace: function (url, query) {
if (!isEmpty(query)) {
url += encodeURIComponent(query);
}
return url;
},
filter: function (data) {
console.log(data);
return $.map(data, function (user) {
return {
id: user.id,
fullName: viewModel.fullName(user)
};
});
}
}
});
// instantiate the typeahead UI
$('#typeahead .typeahead')
.typeahead({
hint: true,
highlight: true,
minLength: 1,
},
{
name: 'engine',
displayKey: 'fullName',
source: engine
})
function fullName(data) {
if (data === undefined) return "";
else {
var fName = data.firstName === undefined ? "" : data.firstName;
var lName = data.lastName === undefined ? "" : data.lastName;
return fName + ' ' + lName;
}
};
JSON-phản ứng máy chủ cung cấp cho:
[{"firstName":"Test","lastName":"User", "id":1}, ... ]
Các trang máy chủ kết quả để nó cho tối đa 5 kết quả, được cho là giới hạn mặc định cho Typeahead/Bloodhound.
Vấn đề là khi máy chủ trả về 5 kết quả, Typeahead hiển thị 0 kết quả trong lớp phủ. Nếu máy chủ cung cấp 4 kết quả, TypeAhead hiển thị 1 trong lớp phủ. Nếu máy chủ cung cấp 3 kết quả, TypeAhead hiển thị 2 kết quả. Đối với kết quả 2 và 1, nó cho thấy số lượng phần tử chính xác trong lớp phủ. Nếu tôi loại bỏ độ dài trang và máy chủ trả về hơn 10 kết quả, thì TypeAhead hiển thị 5 kết quả (giới hạn). console.log bên trong bộ lọc hiển thị số lượng kết quả dữ liệu chính xác, do đó, chúng ít nhất đến được Bloodhound.
Điều gì có thể là vấn đề với mã này? Trường TypeAhead này là trường TypeAhead duy nhất hiện diện trong trang này. Tôi đã kiểm tra DOM và TypeAhead tạo ra số lượng trường kết quả không đúng, do đó, nó không phải là một vấn đề với CSS (đã cố gắng loại bỏ tất cả CSS tùy chỉnh).
Thanks cho bất kỳ trả lời :)
Thực sự có vấn đề với TypeAhead, sửa đổi typeahead.bundle.js như Stnaire đã nói trong trang Github đã giúp. – mpartan