我的某些搜索结果在本地存储中没有基准面



我一直在尝试研究这个问题一段时间,我发现一个人有类似的问题,但他的问题没有解决方案:

https://github.com/twitter/typeahead.js/issues/1340

我的一些猎犬对象正在本地存储中产生预期的结果,但其中两个缺少数据(基准面)。即使他们缺少基准部分,其他一切都可以正常工作。我可以按预期使用提前键入进行搜索。我想知道为什么这两个对象没有存储数据。

我现在尝试使用 cacheKey 属性

而不是默认值,因此此图像不会显示我使用 cacheKey 属性。

示例图像:本地存储

这是我使用提前键入的代码的一部分。预类型有效,但它未存储在本地存储中:

JavaScript:

var sections = new Bloodhound({
    datumTokenizer: function (d) {
        $(".loadingSections").hide();
        var namepartTokens = Bloodhound.tokenizers.nonword(d);
        var nameTokens = Bloodhound.tokenizers.whitespace(d);
        var allTokens = namepartTokens.concat(nameTokens);
        return allTokens;
    },
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    prefetch: {
        url: classLookUp,
        cacheKey: 'sectionLookUp'
    }
});
sections.initialize();
$(".section-lookup .typeahead").typeahead({ highlight: true }, {
    source: sections.ttAdapter()
});

.HTML

...
<script>
    var classLookUp = '@Url.Action("GetClassNames", "Home")';
    ...
</script>
...
 <div class="form-group section-lookup">
     <div class="loadingSections"></div>
     <label class="control-label col-sm-2">Section:</label>
     <div class="col-sm-10">
         @Html.TextBoxFor(x => x.DisplayName, new { @class = "form-control typeahead", @id = "editLookup", @placeholder = "ex. 15/FA CIS-131-102" })
     </div>
</div>
<button type="button" id="editSearch" class="btn btn-primary col-sm-offset-4 col-sm-4">Search for Course</button>

C#

 [HttpGet]
 public ActionResult GetClassNames()
 {
     try
     {
         var newSections = this.repo.Courses;
         var names = newSections.Select(course => course.DisplayName).ToList();
         return this.Json(names, JsonRequestBehavior.AllowGet);
     }
     catch (DatabaseConnectionException)
     {
         return this.Json(new { failure = true }, JsonRequestBehavior.AllowGet);
     }
 }

注意:我似乎离超过本地存储最大存储还很远

我终于发现了为什么它没有存储在本地存储中。原因是超出了本地存储的最大存储。我发现在存储的基准部分的末尾有一个 trie 属性,它与它一起存储。即使您的列表只有 3,000 个元素,附带的 trie 也足够大,可以占用大量存储空间。所以有未知的开销。

特里:好像是搜索的树。我想要一种仅存储基准部分并始终生成树客户端的方法。这样,我们可以在本地存储中存储更多内容。不将其作为默认值会破坏 prefech 的目的,即不调用服务器。我知道这棵树正在客户端构建,但我们不需要将其保存在本地存储中。

相关内容

  • 没有找到相关文章

最新更新