我正在尝试使用Meteor JS模拟实时搜索(顺便说一句,这是一项非常艰巨的任务!)
这是client.js
:
Template.newDiagnostic.events({
"keyup .entry-search": function(e) {
Session.set("search-query", e.currentTarget.value)
}
})
Template.registerHelper("searchQuery", function(value){
var query = new RegExp(Session.get("search-query"))
return query.test(value)
})
Template.newDiagnostic.helpers({
symptoms: function() {
return Symptoms.find({})
}
})
基本上,我有一个事件,在搜索输入中查看keyup,更改会话变量。 接下来,我注册了一个帮助程序来检查给定的字符串是否匹配(RegExp)该会话变量。 最后,助手只是提供数据。
然后,我在我的HTML中有这个:
<template name="newDiagnostic">
<input type="text" class="form-control entry-search" placeholder="Filtrar por nome">
{{#each symptoms}}
{{#if searchQuery name}}
<div class="checkbox">
<label>
<input class="checkbox-symptoms" type="checkbox" value="{{_id}}"> {{name}}
</label>
</div>
{{/if}}
{{/each}}
</template>
在这里,我尝试过滤(隐藏)不在查询中的条目。
模拟实时搜索到目前为止工作正常:您在输入文本中键入内容并过滤条目。 问题是当你搜索某些东西并检查一个条目时。 然后,如果您搜索另一个术语并检查该术语,则您的第一个选中的条目将会消失。 我不想要这种行为。 我想搜索一个条目,检查它,搜索另一个条目,检查它,等等。
我认为这个问题与重新加载模板有关,但我不知道如何使其工作。
我想在Session变量中保存已检查的条目,但这将是我的最后一个选项。
我也尝试了matteodem:easy-search
,但同样的问题也发生了。