Javascript 在meteor应用程序中将变量传递给mongodb查询
因此,我正试图开始使用一个简单的meteor应用程序来搜索数据库。我有一个单一的输入框,从中我可以得到带有以下代码的搜索查询:Javascript 在meteor应用程序中将变量传递给mongodb查询,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,因此,我正试图开始使用一个简单的meteor应用程序来搜索数据库。我有一个单一的输入框,从中我可以得到带有以下代码的搜索查询: Template.search.events = { 'keydown input#search' : function (event) { if (event.which == 13) { var item = document.getElementById('search'); Template.results.results
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:item}替换为(例如){sku:A2277}(在我的数据库中),那么它就可以工作了!如果我在Template.results.results函数中创建一个新变量,比如var item=“A2277”,它也可以工作。这是怎么回事 模板帮助程序设计为由模板调用,而不是由事件处理程序直接调用。您的代码只要求执行一个查询并返回一个值,但它并没有以任何方式绑定到模板。相反,您应该使用如下会话变量:
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来设置/获取项目值。无论如何,这应该设置会话变量并反应性地重新绘制结果