3

[編集] 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);

このコードは、まだロードされていない場合、「ローカリゼーション」をサブスクライブすることになっています。ローカリゼーション コレクションは次のように実装されます。find() および findOne() メソッドは上書きされ、固定された DB に対して 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

これを修正するのを手伝ってください。前もって感謝します

タクセル

4

1 に答える 1