【发布时间】:2015-09-30 23:33:27
【问题描述】:
我使用 sergeyt:typeahead 在我的流星应用程序中创建了一个预先输入的搜索字段。
现在我想记录所有搜索请求,以了解我的数据库中缺少哪些信息。问题是,用户可能不会按回车键。由于 typeahead 功能,用户将输入一些字符,如果没有结果,他们可能会中止输入。一些用户会删除输入以尝试另一个关键字。如果技术上可行,我想获得这些信息。
所以首先我必须检查预先输入的结果有多少,但我不知道从哪里获得这些信息。
这是我目前的代码:
Template.search.helpers({
searchData: function() {
return [
{
name: 'cat1',
valueKey: 'title',
displayKey: 'title',
header: '<h3 class="category-name">Category 1</h3>',
template: 'searchResults',
local: function() { return Collection.find().fetch(); }
}
]
},
selected: function(event, suggestion) {
if (Router.routes[suggestion.type] === void 0) {
console.warn('Route not found');
return;
}
else Router.go(suggestion.type, { _id : suggestion.id });
}
});
我将从该模板的事件开始:
Template.search.events({
'submit form': function(event, template) {
event.preventDefault();
var newElement = template.firstNode.children[0][1].value;
Log.insert({ title: newElement, missing: true });
},
'keyup input': function(event, template) {
var keyword = event.target.value;
Log.insert({ title: keyword });
}
});
submit-event:所以如果用户按下回车,关键字将被保存到集合中。但这很糟糕,因为如果没有预先输入的结果,这应该会发生,因为用户可以选择一个建议,然后按 Enter 键以获取该结果,但是使用我的代码这将被覆盖...
keyup-event:问题在于,每个关键事件都会被跟踪。对于键入“just search”,将有 14 个插入到集合中。那不是我想要的。如果我使用更改事件,则输入必须模糊,这也不是我需要的。
所以在我看来这不是最好的方法。
也许可以使用 typeahead.js 的自定义事件,例如typeahead:render。
【问题讨论】:
标签: javascript meteor typeahead.js