簡體   English   中英

流星:從事件更改db.find()

[英]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"})

        }

    })

我想念什么?

謝謝,

需要牢記兩件事:

  1. 您的模板將僅呈現輔助函數返回的內容,並且您的代碼中沒有任何內容可以更改其內容。 您正在事件處理程序中運行一個完全獨立的數據庫查詢,其結果將不會隨處可見。

  2. 為了使您的模板助手在更改某些設置時能夠被動地重新運行,它需要依賴於被動數據源

因此,所有這些操作的結果就是您應該執行以下操作:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM