我有一个带有的模板。
<template name="listing">
{{#each adList}}
{{> adItemTemplate}}
{{/each}}
</template>
我正在使用以下代码将数据发送到:
Template.listing.adList = function(){
return listingDB.find()
}
这给了我很好的文章清单。但是,我有一个按钮可以缩小列表的范围。
listingDB.find({location:"newyork"})
我正在尝试通过一个事件来做,但是什么也没有发生:
Template.narrowSearch.events({
"click .search":function(){
listingDB.find({location:"newyork"})
}
})
我想念什么?
谢谢,
最佳答案
需要牢记两件事:
您的模板将仅呈现辅助函数返回的内容,并且您的代码中没有任何内容可以更改其内容。您正在事件处理程序中运行一个完全独立的数据库查询,其结果将不会随处可见。
为了使您的模板帮助程序在更改某些设置时能够被动地重新运行,它需要依赖于reactive data source。
因此,所有这些操作的结果就是您应该执行以下操作:
Session.set("query", {});
Template.listing.adList = function() {
return listingDB.find(query);
}
Template.narrowSearch.events({
"click .search":function() {
Session.set(query, {
location: "newyork"
});
}
})
请注意,会话变量不是提供这种反应性的唯一(或必然是正确的)方法-如果您想要更私有的内容,请使用ReactiveVar。
关于javascript - meteor :从事件更改db.find(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26630079/