@@ -140,11 +140,21 @@ function bindAsObject (vm, key, source, cancelCallback) {
140140 * @param {string } key
141141 */
142142function unbind ( vm , key ) {
143- var source = vm . _firebaseSources [ key ]
143+ var source = vm . _firebaseSources && vm . _firebaseSources [ key ]
144+ if ( ! source ) {
145+ throw new Error (
146+ 'VueFire: unbind failed: "' + key + '" is not bound to ' +
147+ 'a Firebase reference.'
148+ )
149+ }
144150 var listeners = vm . _firebaseListeners [ key ]
145151 for ( var event in listeners ) {
146152 source . off ( event , listeners [ event ] )
147153 }
154+ vm [ key ] = null
155+ vm . $firebaseRefs [ key ] = null
156+ vm . _firebaseSources [ key ] = null
157+ vm . _firebaseListeners [ key ] = null
148158}
149159
150160var VueFireMixin = {
@@ -159,8 +169,11 @@ var VueFireMixin = {
159169 }
160170 } ,
161171 beforeDestroy : function ( ) {
172+ if ( ! this . $firebaseRefs ) return
162173 for ( var key in this . $firebaseRefs ) {
163- unbind ( this , key )
174+ if ( this . $firebaseRefs [ key ] ) {
175+ this . $unbind ( key )
176+ }
164177 }
165178 this . $firebaseRefs = null
166179 this . _firebaseSources = null
@@ -176,13 +189,27 @@ var VueFireMixin = {
176189function install ( _Vue ) {
177190 Vue = _Vue
178191 Vue . mixin ( VueFireMixin )
192+
179193 // use object-based merge strategy
180194 var mergeStrats = Vue . config . optionMergeStrategies
181195 mergeStrats . firebase = mergeStrats . methods
196+
182197 // extend instance methods
183- Vue . prototype . $bind = function ( key , source ) {
184- bind ( this , key , source )
198+ Vue . prototype . $bindAsObject = function ( key , source , cancelCallback ) {
199+ bind ( this , key , {
200+ source : source ,
201+ asObject : true ,
202+ cancelCallback : cancelCallback
203+ } )
185204 }
205+
206+ Vue . prototype . $bindAsArray = function ( key , source , cancelCallback ) {
207+ bind ( this , key , {
208+ source : source ,
209+ cancelCallback : cancelCallback
210+ } )
211+ }
212+
186213 Vue . prototype . $unbind = function ( key ) {
187214 unbind ( this , key )
188215 }
0 commit comments