Meteor-重新呈现模板的惯用方法

Meteor-重新呈现模板的惯用方法,meteor,Meteor,我有一个简单的模板,其中有一个搜索框: <template name="search"> <input type="text" name="search" id="search" /> {{> search_results}} </template> 我的问题是,我的评论是:fetchresult from db如何让搜索结果模板自动更新db查询的结果 需要明确的是:我可以很好地获得结果,只是看不到如何更新结果模板。从本质上讲,模板中要重新

我有一个简单的模板,其中有一个搜索框:

<template name="search">
  <input type="text" name="search" id="search" />
    {{> search_results}}
</template>
我的问题是,我的评论是:
fetchresult from db
如何让搜索结果模板自动更新db查询的结果

需要明确的是:我可以很好地获得结果,只是看不到如何更新结果模板。

从本质上讲,模板中要重新提交(
search\u results
)的内容必须是被动的,并注册更改的事件。开箱即用,这意味着它可能是任何数据源。因为这不会发生在您身上,所以我假设当您“从db获取结果”时,您实际上并没有返回minimongo查询的结果,因为这在默认情况下是被动的

如果是这样的话,这类问题通常通过使用
Deps.Dependency
prototype滚动您自己的反应性来最容易解决,据我所知,它支持除minimongo本身之外的所有其他反应性数据源

如果设置
var resultchanged=new Deps.Dependency()
,则会得到一个具有两种方法的对象:
dependens
changed
。在发生更改时,在要重新运行的任何计算中调用前者,然后在注册更改时调用后者。会话变量基本上只是键/值存储,这些
Deps.Dependency
方法分别附加到它们的
get
set
方法

因此,如果您已对
resultchange
进行了初始化,则只需确保
search_results
模板依赖于它,方法是添加一个新的助手函数(如果
results
位于数据上下文中,而不是作为对助手的调用),或者修改
results
助手本身。我将假设为后者,但是添加一个新的助手也同样微不足道

Template.search_results.helpers({
    results: function() {
        resultsChanged.depend();
        // get your results from wherever
        return results;
    }
}); 
每次
resultchanged
更改时都会重新运行,因此在获取结果时只需在回调中添加适当的代码:

  'keyup input#search': function (e) {
       // fetch result from db, passing "resultsChanged.changed()" in a callback
    }
显然,如果结果获取是同步的,您甚至不需要传递回调,只需在下一行执行即可

我希望这有点帮助——如果没有,请告诉我。如果我认为您不仅仅是从数据库中提取某些内容是错误的,那么这可能是完全错误的,因此我建议您在问题中发布实际的“从数据库获取结果”代码

Template.search_results.helpers({
    results: function() {
        resultsChanged.depend();
        // get your results from wherever
        return results;
    }
}); 
  'keyup input#search': function (e) {
       // fetch result from db, passing "resultsChanged.changed()" in a callback
    }