我的部分搜索结果在本地存储中没有基准

时间:2016-07-14 16:02:55

标签: c# model-view-controller typeahead.js bloodhound

我一直在尝试研究这个问题,我找到了一个有类似问题的人,但他的问题没有解决方案:

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

我的一些猎犬对象正在将预期结果产生到本地存储中,但其中两个缺少数据(基准)。即使他们缺少基准部分,其他一切都有效。我可以按预期搜索预先输入。我想知道为什么这两个对象没有存储数据。

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

Sample Image : Local Storage

以下是我使用typeahead的代码的一部分。预先输入有效,但它没有存储在本地存储中:

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

注意:我似乎远离超过localstorage max storage

1 个答案:

答案 0 :(得分:0)

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

trie:它似乎是搜索的树。我想要一种方法来只存储基准部分,并让树始终生成客户端。这样我们就可以在本地存储上存储更多内容。没有这个作为默认设置会破坏预设的目的,即没有调用服务器。我知道树正在构建客户端,但我们不需要将它保存在本地存储中。