Javascript 筛选搜索结果typeahead.js
我遇到了一个问题:我正在向搜索结果传递一个过滤器:这很好,但是typeahead.js缓存了已经搜索过的查询 1.在检查过滤器时键入“spades”。(7项结果) 2.使用my filter函数运行查询,从我的数组中删除与筛选器匹配的任何结果。(5场) 3.禁用我的过滤器 4.运行相同的查询“spades”,返回2个结果。(预期7个结果,实际2个结果) 解决此问题的最佳方法是什么?Javascript 筛选搜索结果typeahead.js,javascript,twitter-bootstrap,typeahead.js,Javascript,Twitter Bootstrap,Typeahead.js,我遇到了一个问题:我正在向搜索结果传递一个过滤器:这很好,但是typeahead.js缓存了已经搜索过的查询 1.在检查过滤器时键入“spades”。(7项结果) 2.使用my filter函数运行查询,从我的数组中删除与筛选器匹配的任何结果。(5场) 3.禁用我的过滤器 4.运行相同的查询“spades”,返回2个结果。(预期7个结果,实际2个结果) 解决此问题的最佳方法是什么? var card_search = new Bloodhound({ datumTokenizer: Bloo
var card_search = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('CARD_NAME'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
// prefetch: '',
remote: {
url : '/search/queries/%QUERY',
filter: testfilter
}
});
card_search.initialize();
过滤功能:
函数测试过滤器(数据)
{
$(“输入:复选框[name=filtericons]:选中”)。每个(函数()
{
var filter=$(this.attr('id');
如果(data.length>0)
{
对于(变量i=0;i
在JavaScript中,通过引用传入数组
因此,当您执行删除数据[i]
时,我相信您正在删除从远程获取缓存的数据
在筛选函数中,尝试:
function testfilter(remoteData)
{
var data = remoteData.slice();
$("input:checkbox[name=filtericons]:checked").each(function()
{
var filter = $(this).attr('id');
if(data.length > 0)
{
for (var i = 0; i < data.length; i++) {
var datum;
datum = data[i];
if ((typeof(datum.SUITE) != "undefined") )
{
for(var k=0; k< datum.SUITE.length;k++)
{
if( datum.SUITE[k] == filter)
{
// data[i]['CARD_VIS'] = 'none';
delete data[i];
}
}
}//end if
}
}
});
return data;
}
函数测试过滤器(远程数据)
{
var data=remoteData.slice();
$(“输入:复选框[name=filtericons]:选中”)。每个(函数()
{
var filter=$(this.attr('id');
如果(data.length>0)
{
对于(变量i=0;i
这似乎可行问题是,当我返回新数组时,我得到一个未捕获类型错误:无法读取handlebar.compile模板中使用的未定义的
的属性“CARD\u INDEX”。@Dewrite2K-对不起,我对handlebar、ember等一无所知。
function testfilter(remoteData)
{
var data = remoteData.slice();
$("input:checkbox[name=filtericons]:checked").each(function()
{
var filter = $(this).attr('id');
if(data.length > 0)
{
for (var i = 0; i < data.length; i++) {
var datum;
datum = data[i];
if ((typeof(datum.SUITE) != "undefined") )
{
for(var k=0; k< datum.SUITE.length;k++)
{
if( datum.SUITE[k] == filter)
{
// data[i]['CARD_VIS'] = 'none';
delete data[i];
}
}
}//end if
}
}
});
return data;
}