Javascript 筛选搜索结果typeahead.js

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

我遇到了一个问题:我正在向搜索结果传递一个过滤器:这很好,但是typeahead.js缓存了已经搜索过的查询

1.在检查过滤器时键入“spades”。(7项结果)

2.使用my filter函数运行查询,从我的数组中删除与筛选器匹配的任何结果。(5场)

3.禁用我的过滤器

4.运行相同的查询“spades”,返回2个结果。(预期7个结果,实际2个结果)

解决此问题的最佳方法是什么?

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;
}