gpt4 book ai didi

javascript - 防止 Meteor 在发布更改时删除已发送给客户端的 MiniMongo 数据

转载 作者:行者123 更新时间:2023-11-29 21:45:10 25 4
gpt4 key购买 nike

我注意到,当我更改已发布的游标时 - 不是游标指向的数据,而是整个游标 - Meteor 将向客户端发送一条 removed 消息,用于所有未出现的文档在新游标中。我的意思是更专业的术语:

// client side
Tracker.autorun(function() {
var someReactiveVar = someReactiveVar.get();
Meteor.subscribe('myPublication', someReactiveVar);
}
...
// server side
Meteor.publish('myPublication', function() {
var someParameter = arguments[0];
return myCollection.find({ someAttribute: someParameter });
});

现在,当 someReactiveVar 发生变化时,所有发送到客户端 MiniMongo myCollection 的文档都将被删除(如果它们不是新游标的一部分)。在某些情况下,这就是您想要的,但我的问题只是:我可以阻止这种情况吗?怎么办?

最佳答案

当您在 Tracker.autorun 中执行 Meteor.subscribe 时,这里会发生一些神奇的事情。基本上,它会在每次运行后 .stop() 旧订阅。

你有两个选择,

1- 使用 nonreactive block 使多个订阅保持事件状态。

注意:您必须编写一些代码来清理 subHandles

var subHandles = [];
Tracker.autorun(function(){
var someReactiveVal = someReactiveVar.get();
Tracker.nonreactive(function(){
var subHandle = Meteor.subscribe('myPublication', someReactiveVal);
subHandles.push(subHandle);
});
});

2- 让您的订阅采用多个值,例如

注意:这将使两组数据在客户端可用,但可能不会停止重新传输。

Template.myTemplate.events({
'click mybutton': function(){
var newVal = getNewVal();
var arrayOfValues = someReactiveVar.get();
arrayOfValues.push(newVal);
someReactiveVar.set(arrayOfValues);
}
})

// client side
Tracker.autorun(function() {
var arrayOfValues = someReactiveVar.get();
Meteor.subscribe('myPublication', arrayOfValues);
}
...
// server side
Meteor.publish('myPublication', function(arrayOfValues) {
return myCollection.find({
someAttribute: {$in: arrayOfValues}
});
});

关于javascript - 防止 Meteor 在发布更改时删除已发送给客户端的 MiniMongo 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31464548/

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