2016-11-06 7 views
2

Im folgenden Code:

export default { 
    props: ['note'], 
    methods: { 
     remove(){ 
      NoteRepo.remove(this.note, (err) => { 
       if (err) { 
        console.log('Should Fire') 
        this.$emit('alerted', { 
         type: 'error', 
         message: 'Failed to remove note' 
        }); 
       } 
      }) 
     } 
    } 
} 

Wenn die Entfernen-Funktion aufgerufen wird, die Konsolenprotokolle „Sollen Feuer“, aber das $ emittieren Ereignis ausgelöst nicht bekommen. Wenn ich das $ -Empfänger außerhalb des Rückrufs wie folgt verschiebe:

Es funktioniert. Ich habe versucht, _this = this zuzuteilen und das zu verwenden, um das $ emergieren aber keinen Unterschied auszustoßen.

Warum wird das $ emitter-Ereignis nicht in einem Callback ausgelöst?

+0

haben Sie versucht, keine Pfeilfunktion zu verwenden? Ich fing gerade an, vue zu benutzen, aber ich scheine mich zu erinnern, in den Dokumenten zu lesen, dass Pfeilfunktionen Kontext nicht richtig binden, wenn sie an einigen Stellen benutzt werden. – theWanderer4865

+0

Ja, wenn ich richtig verstehe, wenn '' '' die Vue -Instanz verwendet, dann ist in diesem Fall eine Pfeilfunktion in Ordnung. Davon abgesehen habe ich versucht (und auch "_self = this" zuzuweisen) und es gibt keinen Unterschied. Ich habe alle möglichen Wege ausprobiert, um es zu kopieren, aber kein Glück. – evu

+1

Ich habe das relevante Bit hier gefunden: http://vuejs.org/v2/guide/instance.html#Properties-and-Methods sieht aus wie eine Pfeilfunktion, die nicht an die VM-Instanz bindet. – theWanderer4865

Antwort

0

So stellt sich heraus, dass es etwas in NoteRepo war, das das Problem verursacht. Insbesondere der Firebase-Ereignis-Callback.

constructor() { 
     super(); 

     // Initialize Firebase 
     Firebase.initializeApp({ 
      apiKey: "xxx", 
      authDomain: "xxx", 
      databaseURL: "xxx", 
      storageBucket: "xxx", 
      messagingSenderId: "xxx" 
     }); 

     this.ref = Firebase.database().ref('notes'); 
     this.attachFirebaseListeners(); 
    } 

    attachFirebaseListeners() { 
     this.ref.on('child_added', this.onAdded, this); 
     this.ref.on('child_removed', this.onRemoved); // Removing 'this' here seems to of fixed it. 
     this.ref.on('child_changed', this.onChanged, this); 
    } 

Ich bin mir nicht sicher, was genau falsch war, aber dies scheint für jetzt sortiert.