backbone.firestore
v0.3.0
Published
[![Build Status](https://api.travis-ci.org/jeffreycahyono/backbone.firestore.svg?branch=master)](https://travis-ci.org/jeffreycahyono/backbone.firestore) [![Coverage Status](https://coveralls.io/repos/github/jeffreycahyono/backbone.firestore/badge.svg)](h
Downloads
7
Maintainers
Readme
Backbone Firebase FireStore Backend
An adapter that replaces Backbone.sync
to save to Firebase Firestore
instead of using ajax.
Usage
Import backbone.firestore
and attach it to your models and collections:
const firebase = require("firebase");
require("firebase/firestore");
import {Collection, Model} from 'backbone';
import {FirestoreAdapter} from 'backbone.firestore';
firebase.initializeApp({
apiKey: '### FIREBASE API KEY ###',
authDomain: '### FIREBASE AUTH DOMAIN ###',
projectId: '### CLOUD FIRESTORE PROJECT ID ###'
});
const SomeCollection = Collection.extend({
/**
* This collection will linked to Firestore collection which its name is
* 'SomeCollection' => firebase.firestore().collection('SomeCollection')
*/
firestore: new FirestoreAdapter('SomeCollection'),
});
const SomeModel = Model.extend({
/**
* A model can also has firestore property linked to
* Firestore collection 'SomeCollection'
*/
firestore: new FirestoreAdapter('SomeCollection')
});
To enable realtime update for subsequent changes, use subscriptionEnabled: true
in the fetch options
const myModel = new SomeModel({ id: 1234 });
//any changes in firestore doc of id 1234 will also synced to myModel
myModel.fetch({subscriptionEnabled: true});
const myCol = new SomeCollection();
//any changes in firestore collection will also synced to myCol
myCol.fetch({ subscriptionEnabled: true });
To unsubscribe from realtime update
import { FirestoreAdapter, unsubscribeUpdate } from 'backbone.firestore';
//myModel won't sync to firestore document changes
unsubscribeUpdate(myModel);
//myCol won't sync to firestore collection / queries changes
unsubscribeUpdate(myCol);
To perform firestore query
const myCol = new SomeCollection();
let options = {
//use firestoreQuery callback which its argument is CollectionReference and
//return the query
firestoreQuery = colRef => colRef.where('age', '<=', 50).orderBy('age')
}
myCol.fetch(options);
To synchronise with the normal REST api server that uses backbone collection url
property, you can pass the ajaxSync
flag to any options:
const myModel = new SomeModel();
myModel.fetch({
ajaxSync: true // Fetches from the server
});
myModel.save({
new: "value"
}, {
ajaxSync: true // Pushes back to the server
});
JavaScript ES5
var bbFirestore = require('backbone.firestore');
var FirestoreAdapter = bbFirestore.FirestoreAdapter;
JavaScript ES6+
import {FirestoreAdapter} from 'backbone.firestore';
Contributing
Install NodeJS and run yarn
or npm i
to get your dependencies, then:
- Open an issue identifying the fault
- Provide a fix, with tests demonstrating the issue
- Create
.env
in root project directory to provide the firebase firestore credentials. There is an example in.env.example
- Run
npm test
- Create a pull request
Acknowledgments
- Jerome Gravel-Niquet: This code is basically a port of his awesome Backbone.localStorage library