Jquery Typeahead tidak memaparkan hasil carian

Hari ini, terpaksa menghadap isu dari plugin ini https://twitter.github.io/typeahead.js/ . Ketika hantaran ini ditulis (atau lebih tepat ditaip), plugin ini masih diversi 0.11.1.

Masalah plugin ini adalah, apabila hasil dari json lebih kecil dari had yang ditetapkan. Sebagai contoh, sekiranya kita hadkan hanya papar 5 baris hasil carian, sekiranya hasil carian tersebut bersamaan dengan 5 atau kurang dari 5, typeahead akan trigger untuk paparkan “Result Not Found.

Ada dua jalan penyelesaian yang boleh digunakan.
1. Penggunaan limit:Infinity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var bestPictures = new Bloodhound({
  datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  prefetch: '../data/films/post_1960.json',
  remote: {
    url: '../data/films/queries/%QUERY.json',
    wildcard: '%QUERY'
  }
});
 
$('#remote .typeahead').typeahead(null, {
  name: 'best-pictures',
  display: 'value',
  limit:Infinity,
  source: bestPictures
});

Isu penggunaan limit:Infinity adalah anda perlu menguruskan had pada bahagian pelayan sekiranya ada menggunakan cara remote.

Jadi saya mencadangkan cara yang kedua, kita ubah terus fail typeahead.bundle.js

Lihat baris 1707 hingga 1727

Baris 1715

1
if (rendered < that.limit && that.async) {

Tukar kepada

1
if (rendered <= that.limit && that.async) {

Baris 1721

1
if (!canceled && rendered < that.limit) {

Tukar kepada

1
if (!canceled && rendered <= that.limit) {

Baris 1723 dan 1724

1
2
rendered += suggestions.length;
that._append(query, suggestions.slice(0, that.limit - rendered));

Tukar kepada

1
2
that._append(query, suggestions.slice(0, that.limit));
rendered += suggestions.length;

Untuk baris 1723 & 1724, sumber rujukan disini (https://stackoverflow.com/a/35935557)

Harapnya dapat membantu sekiranya anda menghadapi masalah yang sama dengan saya.

Untuk memahami masalah ini dengan lebih mendalam boleh rajin-rajinlah membaca disini.

Add a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.