code: function bindAsArray (vm, key, source, cancelCallback) {
    var array = []
    defineReactive(vm, key, array)
  
    var onAdd = source.on('child_added', function (snapshot, prevKey) {
      var index = prevKey ? indexForKey(array, prevKey) + 1 : 0
      array.splice(index, 0, createRecord(snapshot))
    }, cancelCallback)
  
    var onRemove = source.on('child_removed', function (snapshot) {
      var index = indexForKey(array, _getKey(snapshot))
      array.splice(index, 1)
    }, cancelCallback)
  
    var onChange = source.on('child_changed', function (snapshot) {
      var index = indexForKey(array, _getKey(snapshot))
      array.splice(index, 1, createRecord(snapshot))
    }, cancelCallback)
  
    var onMove = source.on('child_moved', function (snapshot, prevKey) {
      var index = indexForKey(array, _getKey(snapshot))
      var record = array.splice(index, 1)[0]
      var newIndex = prevKey ? indexForKey(array, prevKey) + 1 : 0
      array.splice(newIndex, 0, record)
    }, cancelCallback)
  
    vm._wilddogListeners[key] = {
      child_added: onAdd,
      child_removed: onRemove,
      child_changed: onChange,
      child_moved: onMove
    }
  }
docs: Bind a wilddog data source to a key on a vm as an Array.
  
  @param {Vue} vm
  @param {string} key
  @param {object} source
  @param {function|null} cancelCallback