![](/img/trans.png)
[英]Uncaught TypeError: DB.find is not a function in React with Meteor 1.3
[英]Meteor: change db.find() from an event
我有一個帶有<#each>的模板。
<template name="listing">
{{#each adList}}
{{> adItemTemplate}}
{{/each}}
</template>
我正在使用以下代碼將數據發送到<#each>:
Template.listing.adList = function(){
return listingDB.find()
}
這給了我很好的文章清單。 但是,我有一個按鈕可以縮小列表的范圍。
listingDB.find({location:"newyork"})
我正在嘗試通過一個事件來做,但是什么也沒有發生:
Template.narrowSearch.events({
"click .search":function(){
listingDB.find({location:"newyork"})
}
})
我想念什么?
謝謝,
需要牢記兩件事:
您的模板將僅呈現輔助函數返回的內容,並且您的代碼中沒有任何內容可以更改其內容。 您正在事件處理程序中運行一個完全獨立的數據庫查詢,其結果將不會隨處可見。
為了使您的模板助手在更改某些設置時能夠被動地重新運行,它需要依賴於被動數據源 。
因此,所有這些操作的結果就是您應該執行以下操作:
Session.set("query", {});
Template.listing.adList = function() {
return listingDB.find(query);
}
Template.narrowSearch.events({
"click .search":function() {
Session.set(query, {
location: "newyork"
});
}
})
請注意,會話變量不是提供這種反應性的唯一(或必然是正確的)方法-如果您想要更私有的內容,請使用ReactiveVar 。
Template.listing.adList = function(){
var query = Session.get('query') || {};
return listingDB.find(query);
}
Template.narrowSearch.events({
"click .search":function(){
Session.set(query, {location: 'newyork'});
}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.