gpt4 book ai didi

cordova - Meteor-React:GroundDB 突然空了

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

[编辑]更新至 Ground DB v2,使代码更具可读性

我正在尝试在我的项目中使用GroundDB,因此我的Meteor-React Cordova应用程序也可以离线运行。在主容器中我有以下代码:

let fullyLoaded = new ReactiveVar(false);
let subscribed = false;
let subscribedOnce = false;
let checking = false;

export default createContainer(() => {

if(Meteor.status().connected && !subscribedOnce && !subscribed){
subscribed = true;
console.log("subscribing");
Meteor.subscribe("localization",
()=> {
localizationGrounded.keep(Localization.findNonGrounded());
console.log("everything has been loaded once.");
console.log("Localization count after subscription: " + Localization.find().fetch().length);

fullyLoaded.set(true);
subscribed = false;
subscribedOnce = true;
}

);
}
if(fullyLoaded.get()){
console.log("Localization Count: " + Localization.find().fetch().length)
}
return {
isLoggedIn: !!Meteor.userId(),
isLoading: !fullyLoaded.get() || subscribed,

};
}, Main);

如果尚未加载此代码,则应该订阅“本地化”。 Localization Collection 的实现如下,find() 和 findOne() 方法已被覆盖,以调用 find() 来查找接地数据库:

export const Localization = new Mongo.Collection('localization');

if(Meteor.isClient){
export let localizationGrounded = new Ground.Collection('localization', {
cleanupLocalData: false
});


//rename find() to findNonGrounded
Localization.findNonGrounded = Localization.find;

localizationGrounded.observeSource(Localization.findNonGrounded());

Localization.find = function(...args){
console.log("finding from ground db");
return localizationGrounded.find(...args);
};

Localization.findOne = function(...args){
console.log("finding one from ground db");
return localizationGrounded.findOne(...args);
}
}

但是这会产生以下输出:

subscribing
everything has been loaded once
finding from ground db
Localization count after subscription: 28
finding from ground db
Localization count: 28

看起来不错,对吧?不幸的是,createContainer() 函数在此之后立即被再次调用,导致

...
Localization count: 28
//Lots of "finding one from ground db" indicating the page is being localized correctly
finding from ground db
Localization Count: 0
//more "finding one from ground db", this time returning undefined

请帮我解决这个问题。提前致谢

紫杉醇

最佳答案

据我们调查(同时发现了您的问题),这不是 GroundDB 错误。

目前我们正在做类似的事情:也是一个 Cordova 应用程序,尝试使大约 30 个不同的集合保持离线状态,并且也使用 React(但使用 Mantrajs)。因此,今天,我们几乎可以肯定,Meteor 的功能就是从集合中删除数据,我将尝试解释一下自己:

Meteor 似乎以某种方式检测到集合未被使用,并且几乎立即删除所有数据,然后 GroundDB 也从 IndexedDB 中删除数据。我们下载了 GroundDB 代码,将其添加到我们的 Meteor 项目中并检查了它,发现了之前的行为。

目前,我们正在尝试找到某种方法来检测集合何时被完全删除,Meteor Collection 上的某种属性可以告诉我们它将被清除,以便我们可以修复 GroundDB 代码并且不要删除 IndexedDB这种情况下的数据。

我们正在尝试的另一个选项是使用此组件:https://github.com/richsilv/meteor-dumb-collections

它看起来与 GroundDB 非常相似,但它永远不会将本地数据同步到 Meteor Server,直到您调用同步函数,因此对于我们和我们的 30 个集合来说,它可能更难使用:)

希望对您有帮助。

关于cordova - Meteor-React:GroundDB 突然空了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40493034/

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