2016-11-08 11 views
3

[EDIT]地上DB V2に更新され、作られた、より読みやすいコード流星反応する:突然空GroundDBを

私は私の流星が反応しコルドバアプリケーションはまた、オフラインで実行することができ、私のプロジェクトでGroundDBを使用しようとしています。メインコンテナには次のコードがあります。

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

このコードは、まだロードされていない場合は「ローカリゼーション」に登録する予定です。ローカリゼーションコレクションは、次のように(、検索を実施され)、findOne()メソッドは接地DB用)(見つける呼び出すために上書きされている:

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 

この問題を解決するのを手伝ってください。事前に おかげ

Taxel

答えて

0

は限り我々が調査(およびその間あなたの質問を見つけました)しているように、これはGroundDBエラーではありません。オフラインで約30 diferentコレクションを維持しようと、あまりにも(しかしMantrajsで)リアクト使用し、また、コルドバのApp:

現在、我々は、似たような中で働いています。今日のように、Meteorがコレクションからデータを消去する方法であることはほとんど確信しています。私は自分自身を説明しようとしています。

Meteorはコレクションが使用されておらずすぐにすべてのデータを削除してから、GroundDBはIndexedDBからもデータを削除します。 GroundDBコードをダウンロードしてMeteorプロジェクトに追加し、それを検査して以前の動作を確立しました。

現在、私たちは、コレクションが完全に消去されたときに、Meteor Collection上の何らかの種類のプロパティを検出して、GroundDBコードを修正して削除しないようにすることができますその場合IndexedDBデータ。

我々がしようとしている他のオプションは、このコンポーネントを使用することです:https://github.com/richsilv/meteor-dumb-collections

それはGroundDBに非常に似ているようだが、あなたは同期機能を呼び出すまで、使用することを困難にすることができて、それは、流星サーバーにローカルデータを同期することはありません私たちと私たちの30点のコレクションのために:)

は、それはあなたのお役に立てば幸いです。

関連する問題