<!DOCTYPE html>
<html>

  <head>
    <script src="https://cdn.firebase.com/js/client/2.1.2/firebase.js"></script>
    <script src="https://cdn.rawgit.com/js-data/js-data/master/dist/js-data.js"></script>
    <script src="https://cdn.rawgit.com/js-data/js-data-firebase/master/dist/js-data-firebase.js"></script>
    <script src="script.js"></script>
  </head>

  <body>
    <h1>Open up your console to see the output</h1>
  </body>

</html>
var store = new JSData.DS();
var fbAdapter = new DSFirebaseAdapter({
  basePath: 'https://js-data-firebase.firebaseio.com'
});
store.registerAdapter('fb', fbAdapter, {
  default: true
});

var Triangle = store.defineResource({
  name: 'triangle',
  relations: {
    hasOne: {
      point: [{
        localKey: 'point1Key',
        localField: 'point1'
      }, {
        localKey: 'point2Key',
        localField: 'point2'
      }, {
        localKey: 'point3Key',
        localField: 'point3'
      }]
    }
  }
});
var Point = store.defineResource({
  name: 'point'
});

store.utils.Promise.all([
  // clean up, so my firebase doesn't get filled up
  Triangle.destroyAll(),
  Point.destroyAll()
]).then(function() {
  return store.utils.Promise.all([
    // bypassCache: true, so we can better simulate loadRelations,
    // otherwise they would already be in the store
    Point.create({
      x: 0,
      y: 0
    }, {
      bypassCache: true
    }),
    Point.create({
      x: 5,
      y: 0
    }, {
      bypassCache: true
    }),
    Point.create({
      x: 2.5,
      y: 5
    }, {
      bypassCache: true
    })
  ]);
}).then(function(points) {
  return Triangle.create({
    type: 'equilateral',
    point1Key: points[0].id,
    point2Key: points[1].id,
    point3Key: points[2].id
  });
}).then(function(triangle) {
  console.log(triangle);

  // let's load the triangle's points
  // instead of "['point']" you could do "['point1', 'point2', 'point3']"
  return Triangle.loadRelations(triangle.id, ['point']);
}).then(function(triangle) {
  console.log(triangle);
  console.log(triangle.point1);
  console.log(triangle.point1 === Point.get(triangle.point1Key));
  console.log(triangle.point2);
  console.log(triangle.point2 === Point.get(triangle.point2Key));
  console.log(triangle.point3);
  console.log(triangle.point3 === Point.get(triangle.point3Key));
  console.log(triangle);
}).then(function() {
  return store.utils.Promise.all([
    // clean up again, so my firebase doesn't get filled up
    Triangle.destroyAll(),
    Point.destroyAll()
  ]);
});