在meteor app中将变量传递给mongodb查询

时间:2014-01-01 14:44:16

标签: javascript mongodb meteor

所以我正在尝试使用简单的流星应用程序来搜索数据库。我有一个输入框,我可以使用以下代码从中获取搜索查询:

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”也可以。这是怎么回事?!

1 个答案:

答案 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来设置/获取项目值。无论如何,这应该设置会话变量并反应性地重绘结果。