过滤搜索结果typeahead.js

时间:2014-03-19 22:52:45

标签: javascript twitter-bootstrap typeahead.js

我遇到了问题:我正在将过滤器传递给我的搜索结果:这样可以正常工作,但是typeahead.js会缓存已经搜索过的查询。

1.键入"黑桃"而我的过滤器被检查。 (7结果)

2.Run查询使用我的过滤器函数从我的数组中删除任何匹配过滤器的结果。 (5场比赛)

3.禁用我的过滤器。

4.运行相同的查询"黑桃",返回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();

过滤功能:

function testfilter(data)
{

$("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;
}

1 个答案:

答案 0 :(得分:1)

在JavaScript中,您通过引用传入数组。

因此,当您执行delete data[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;
}