#5398 closed bug (fixed)
Remote-with-cache demo does not break if (cache.term == request.term) but executes another request
Reported by: | thewolfram | Owned by: | |
---|---|---|---|
Priority: | minor | Milestone: | 1.8.2 |
Component: | ui.autocomplete | Version: | 1.8 |
Keywords: | demo | Cc: | |
Blocked by: | Blocking: |
Description
Small error in a demo: In case the new search term and the cached term are equal or the new term contains the cached term, the cached data is (partially) used but another GET is executed nevertheless. The $.ajax should go in an else block.
MacOSX, FF 3.6
Change History (4)
comment:1 Changed 13 years ago by
comment:2 Changed 13 years ago by
Oh yeah. The first if block can also get a return statement after the response call. We could also improve the demo by creating a make cached autocomplete function. Something like:
function caching_auto_complete(item, url, options) { var cache = {}; options.source = function(request, response) { if (cache.term == request.term && cache.content) { response(cache.content); return; } if (new RegExp($.ui.autocomplete.escapeRegex(cache.term)).test(request.term) && cache.content && cache.content.length < 13) { var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); response($.grep(cache.content, function(value) { // NOTE change to match core autocomplete logic return matcher.test(value.label || value.value || value) })); return; } $.ajax({ url: url, dataType: "json", data: request, success: function(data) { cache.term = request.term; cache.content = data; response(data); } }); } $(item).autocomplete(options); } caching_auto_complete('#birds', "search.php", { minLength: 2, select: function(event, ui) { log(ui.item ? ("Selected: " + ui.item.value + " aka " + ui.item.id) : "Nothing selected, input was " + this.value); }});
This is almost completely untested.
comment:3 Changed 13 years ago by
Milestone: | TBD → 1.9 |
---|---|
Resolution: | → fixed |
Status: | new → closed |
Fixed in e087e7d.
comment:4 Changed 13 years ago by
Milestone: | 1.9 → 1.8.2 |
---|
Note: See
TracTickets for help on using
tickets.
The if condition is also probably needs tweaking. It currently says:
It should be:
Note that cache.term in the if condition is now wrapped in a call to $.ui.autocomplete.escapeRegex to match the matcher RegExp?. Also the original bug is fixed by adding a return to the if block.
Also matcher tests value.value, this is a deviation from how the list of object works in the autocomplete itself. It uses: