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
}