gpt4 book ai didi

javascript - meteor JS : resubscribe/refresh a Collection?

转载 作者:可可西里 更新时间:2023-11-01 09:59:00 25 4
gpt4 key购买 nike

我目前正在处理我的 meteor 项目,但我不太了解解决我的问题的 meteor 方式是什么。

我有一个最初在页面加载时调用的订阅。我在没有任何参数的情况下订阅了以下出版物:

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。我怎样才能做到这一点?我是否必须取消订阅并重新订阅(如果是):如何?

最佳答案

这里的关键是通过始终限制结果来限制在客户端发送(和可能存储)的数据。

简而言之,就是重新订阅该出版物。这可以通过多种方式完成,但最简单的(在我看来也是最优雅的)是将自动运行与 react 源一起使用,例如 SessionReactiveVar .每当更改此源时,都会触发新的订阅并取消之前的订阅。

来自 Meteor 文档: http://docs.meteor.com/#/full/meteor_subscribe

If you call Meteor.subscribe within a reactive computation, for example using Tracker.autorun, the subscription will automatically be cancelled when the computation is invalidated or stopped; it's not necessary to call stop on subscriptions made from inside autorun.

您的重新订阅代码可能如下所示:

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);
}
});

关于javascript - meteor JS : resubscribe/refresh a Collection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32456174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com