重新订阅/刷新一个集合
MeteorJS: resubscribe/refresh a Collection?
我目前正在做我的流星项目,我不太明白流星的方式对我的问题是什么
我有一个订阅,最初在页面加载时调用。我订阅以下不带任何参数的出版物:
Meteor.publish('testCollection', function(searchitem){
if(searchitem){
return testCollection.find({name:searchitem});
}
else{
return testCollection.find({},{
sort: { rating: -1 },
limit: 5,
fields: {
_id:1,
name:1,
description:1
}
});
}
});
这工作得很好,我从else-case中得到我的结果。
但是我希望用户能够在这个集合中搜索一个名字。所以我的刷新想法是在提交时使用searchbutton:
Meteor.subscribe("testCollection","abc");
但是这并没有刷新我的客户端testCollection。我怎样才能做到这一点呢?如果是,我是否需要退订并再次订阅?如何退订?
这里的关键是通过始终限制结果来限制在客户端发送(并可能存储)的数据。
简而言之就是重新订阅出版物。这可以通过多种方式实现,但最简单的(在我看来也是最优雅的)是将自动运行与响应源(如Session或ReactiveVar)一起使用。每当此源更改时,将触发一个新的订阅,并取消先前的订阅。
From Meteor docs:http://docs.meteor.com//全/meteor_subscribe
如果你调用Meteor。在响应式计算中订阅,例如使用Tracker的示例。自动运行时,订阅将自动进行当计算无效或停止时取消;这不是必须在autorun内部的订阅中调用stop。
重新订阅的代码可以像这样:
Tracker.autorun(function() {
if (Session.get('someCustomQuery'))
Meteor.subscribe('testCollection', Session.get('someCustomQuery'));
});
我推荐David Burles的这个教程:
http://meteorcapture.com/simple-search-pattern/带有ReactiveVar的示例代码,由事件触发:
Template.myTemplate.rendered = function(){
var self = this;
Tracker.autorun(function() {
if (self.searchQuery.get())
{
var queryOptions = {
query: self.searchQuery.get()
};
Meteor.subscribe('testCollection', queryOptions);
}
});
}
Template.myTemplate.created = function(){
this.searchQuery = new ReactiveVar('');
};
Template.myTemplate.events({
'keyup [type=search]': function(event, template) {
template.searchQuery.set(event.target.value);
}
});
相关文章:
- 包含一个集合的1到3个成员但其中一个成员不能单独存在的正则表达式
- 如何将两个集合转换为一个集合
- Meteor:访问另一个集合,每个块中有一个id
- Backbone.js视图可以有一个模型和一个集合吗
- 另一个集合视图中的集合视图
- Mongo-Aggregate:如何与另一个集合中的字段进行比较
- Meteor - 将 mongodb 查询分配给变量并将其插入到另一个集合
- 基于 MongoDB 中另一个集合中的数据查询一个集合中的数据
- 流星 - 将数据从一个集合移动到另一个集合
- 一个集合中的不同模型类型 主干
- 如何在插入时引用另一个集合
- 主干:将模型从一个集合添加到另一个集合
- 用于将树分支从集合移动到另一个集合的Firebase API
- WinstonMongoDB:如何将日志管道传输到多个集合,而不是全部传输到一个集合
- 如何仅从一个集合中删除主干模型
- MongoDB:从一个集合中提取多个随机文档
- 在Meteor(MongoDB)中,按另一个集合中的值搜索一个集合
- MongoDB-插入到两个集合中,一个集合引用另一个作为子文档
- Meteor从数组返回值,以便在另一个集合中使用它
- 只有当一个新元素被添加到一个集合中时,才使用$inc