2017-06-26 2 views
1

Ich habe eine debounce Nutzenfunktion:Warum bricht diese Entprellfunktion "dieses"?

debounce (func, wait, immediate) { 
    let timeout 
    return function() { 
    const context = this 
    const args = arguments 
    const later = function() { 
     timeout = null 
     if (!immediate) func.apply(context, args) 
    } 
    const callNow = immediate && !timeout 
    clearTimeout(timeout) 
    timeout = setTimeout(later, wait) 
    if (callNow) func.apply(context, args) 
    } 
} 

Was ich wie folgt verwenden:

updateField: utils.debounce((event, fieldName, schema) => { 
    const value = event.target.value 
    this.$emit('updateField', fieldName, value, schema) 
    validateFields(this) 
}, 500), 

Die Entprellfunktion funktioniert. Allerdings bekomme ich diesen Fehler:

Uncaught TypeError: _this.$emit is not a function 

Was könnte das Problem sein?

Antwort

1

Angenommen updateField ist eine Vue-Methode, da diese mit Vue markiert ist, weil Sie eine Pfeilfunktion verwenden.

Ändern Sie es in eine normale Funktion.

updateField: utils.debounce(function(event, fieldName, schema){ 
    const value = event.target.value 
    this.$emit('updateField', fieldName, value, schema) 
    validateFields(this) 
}, 500) 

Sie sollten keine Vue-Methoden mit Pfeilfunktionen definieren. Der Grund dafür ist, dass Vue die Methoden an den Vue bindet und die Pfeilfunktionen nicht gebunden werden können (Sie können ihre this nicht ändern).

Verwandte Themen