所以我正在尝试使用简单的流星应用程序来搜索数据库。我有一个输入框,我可以使用以下代码从中获取搜索查询:
Template.search.events = {
'keydown input#search' : function (event) {
if (event.which == 13) {
var item = document.getElementById('search');
Template.results.results(item.value)
//console.log(item);
item.value = '';
}
}
}
我将搜索查询传递给另一个应该查询mongodb并在模板中打印结果的函数:
Template.results.results = function (item) {
return Products.find({sku: item});
}
然而,它从未找到该项目!如果我在Chrome控制台中运行相同的查询,则可以正常运行。如果我用(例如){sku:“A2277”}(在我的数据库中)替换代码中的{sku:item},那么它可以工作!如果我在Template.results.results函数中创建一个新变量,例如var item =“A2277”也可以。这是怎么回事?!
答案 0 :(得分:3)
模板助手旨在由您的模板调用,而不是由您的事件处理程序直接调用。您的代码只是要求查询发生并返回一个值,但它不会以任何方式绑定到您的模板。相反,您应该使用如下的会话变量:
Template.results.results = function() {
return Products.find({sku: Session.get('itemSku')});
};
然后在您的事件处理程序中,您可以执行以下操作:
Template.search.events({
'keydown input#search': function(event) {
if (event.which === 13) {
var $item = $('#search');
Session.set('itemSku', $item.val());
$item.val('');
}
}
});
注意我在这里使用jQuery来设置/获取项目值。无论如何,这应该设置会话变量并反应性地重绘结果。