Meteor:从事件中更改db.find()

时间:2014-10-29 12:14:49

标签: javascript templates events meteor

我有一个带<#each>。

的模板
    <template name="listing">

        {{#each adList}}

            {{> adItemTemplate}}

        {{/each}}

    </template>

我将数据发送到&lt;#each&gt;使用此代码:

    Template.listing.adList = function(){

        return listingDB.find()

    }

这给了我很好的文章清单。但是,我有一个缩小列表的按钮。

listingDB.find({location:"newyork"})

我试图用一个事件来做但没有任何反应:

    Template.narrowSearch.events({

        "click .search":function(){

            listingDB.find({location:"newyork"})

        }

    })

我缺少什么?

THX,

2 个答案:

答案 0 :(得分:1)

要记住两件事:

  1. 您的模板只会呈现辅助函数返回的内容,并且您的代码中没有任何内容会改变它的内容。您在事件处理程序中运行一个完全独立的数据库查询,其结果将不会出现在任何地方。

  2. 为了让模板助手在您更改某些设置时重新运行被动,它需要依赖于reactive data source

  3. 所有这一切的结果是你应该做的事情:

    Session.set("query", {});
    
    Template.listing.adList = function() {
        return listingDB.find(query);
    }
    
    Template.narrowSearch.events({
        "click .search":function() {
            Session.set(query, {
                location: "newyork"
            });
        }
    })
    

    请注意,会话变量不是提供此反应性的唯一(或必然是正确的)方式 - 如果您想要更私密的内容,请使用ReactiveVar

答案 1 :(得分:0)

Template.listing.adList = function(){
    var query = Session.get('query') || {};

    return listingDB.find(query);

}

Template.narrowSearch.events({

    "click .search":function(){
        Session.set(query, {location: 'newyork'});

    }

})