我有一个带有的模板。

    <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/

10-11 23:01
查看更多