gpt4 book ai didi

javascript - Meteor Tracker 无法自动接收订阅

转载 作者:行者123 更新时间:2023-12-02 22:44:36 25 4
gpt4 key购买 nike

我正在使用 Template.onCreated 创建一些模板,然后使用 Tracker.autorun 进行一些订阅,然后从服务器收集数据并将它们存储在客户端的 MiniMongo 上。

然后,我可以离开所述模板并最终返回。然而,我注意到回来后,Blaze 没有捕获我的更改。当路由返回时,似乎调用的是onRendered而不是onCreated。这是有道理的,但是,onRendered 还没有对我的所有数据更改做出完全 react 。我注意到这是因为 minimongo 实际上没有 onRendered 的数据。

但是,我注意到它可以通过刷新页面来获取对象(从而调用 onCreated 并再次订阅并从服务器获取一组新数据)我的解决方法是在 onRendered 中重新订阅,但我觉得我不必这样做,因为我最初已经在 OnCreated 中订阅了。这是 Meteor 的问题吗?DDP 速度很慢吗?

假设我有一些名为“对象”的默认通用集合。

const Objects = new Mongo.Collection("Objects"); 

因此,在我的 onCreated 中,我订阅了一个集合,如下所示

Template.foo.onCreated(function () {
var self = this;

self.autorun(function () {
const objId= FlowRouter.getParam("id");


self.objectSubscription = Meteor.subscribe('obj', objId, {
onReady: function () {

},
onStop: function (error) {
if (error) {
alert('error')
}
}
});

然后在 onRendered 中,我必须破解它并不必要地重新订阅,因为我没有 objId,即我不能只使用 Objects.find(),

Template.foo.onRendered(function () {
const objId= FlowRouter.getParam("id");

Meteor.subscribe('obj', objId, {
onReady: function () {
$('#obj').addClass('highlight');
},
onStop: function (error) {
if (error) {
alert('error');
}
}
});

//I feel like I should just be able to do
//const obj = Objects.findOne({_id:objId})
//$('#obj').addClass('highlight')

});

任何见解,为什么我会丢失 minimongo 中的数据? “重新订阅”是一种不好的做法吗?

最佳答案

onCreatedonRendered 不是响应式的,但 template helpers 是响应式的。因此,要不断检测这两者的变化,您必须创建一个响应式上下文并将其放置在其中,这可以使用 Tracker.autorun 来实现。另外,请注意,最好保留 onRenderd 进行 DOM 操作,并保留 onCreated 进行订阅和创建 react 变量

您不需要双重订阅来检测更改,在我看来,这通常是一种不好的做法。

Template.foo.onCreated(function onCreated() {
const self = this;
this.autorun(function() {
const id = FlowRouter.getParam('_id');
self.subscribe('obj', id);
});
});


Template.foo.onRendered(function onRendered() {
const self = this;
// this will run after subscribe completes sending records to client
if (self.subscriptionsReady()) {
// do whatever you want
$('#obj').addClass('highlight');
}
});

关于javascript - Meteor Tracker 无法自动接收订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58457658/

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