diff --git a/background/sync/firebase_sync.js b/background/sync/firebase_sync.js index 91bef27..3dedeea 100644 --- a/background/sync/firebase_sync.js +++ b/background/sync/firebase_sync.js @@ -2,12 +2,18 @@ var FirebaseSync = function(Backbone, _, firebaseStoreName) { var firebaseUserRef = 'https://gombot.firebaseIO.com/'+firebaseStoreName; - function getFirebaseStoreForUser(model) { + function maybeInitFirebaseStoreForUser(model, callback) { + if (model.firebase) return _.defer(callback); + var firebaseReady = function(firebase) { + model.firebase = firebase; + callback(); + }; + var storePath = [ firebaseUserRef, btoa(model.get("email")), model.keys.authKey, model.keys.authKey ].join('/'); - return new Backbone.Firebase(new Firebase(storePath)); + new Backbone.Firebase(new Firebase(storePath), firebaseReady); } function sync(method, model, options) { @@ -15,8 +21,9 @@ var FirebaseSync = function(Backbone, _, firebaseStoreName) { console.log("Error missing keys in model for firebase", model); return; } - model.firebase = model.firebase || getFirebaseStoreForUser(model); - Backbone.Firebase.sync(method, model, options); + maybeInitFirebaseStoreForUser(model, function () { + Backbone.Firebase.sync(method, model, options); + }) } return { diff --git a/lib/backbone-firebase.js b/lib/backbone-firebase.js index 3ea2e07..2ca70e4 100644 --- a/lib/backbone-firebase.js +++ b/lib/backbone-firebase.js @@ -7,13 +7,20 @@ return (function() { const USER_DATA_KEY = "userData"; -Backbone.Firebase = function(ref) { +Backbone.Firebase = function(ref, callback) { this._fbref = ref; this._children = []; if (typeof ref == "string") { this._fbref = new Firebase(ref); } + var ready = function (snapshot) { + this._fbref.off("value", ready); + callback(this); + }.bind(this); + + this._fbref.on("value", ready); + _.bindAll(this); this._fbref.on("child_added", this._childAdded); this._fbref.on("child_moved", this._childMoved);