Nach einem answer zu meinem question on debouncing frage ich mich, ob vue.js und lodash
/underscore
für diese Funktionalität kompatibel sind. Der Code in der AntwortSind Vue.js und debounce (lodash/underscore) kompatibel?
var app = new Vue({
el: '#root',
data: {
message: ''
},
methods: {
len: _.debounce(
function() {
return this.message.length
},
150 // time
)
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.6/vue.js"></script>
<script src="https://unpkg.com/[email protected]"></script> <!-- undescore import -->
<div id="root">
<input v-model="message">Length: <span>{{ len() }}</span>
</div>
hält zwar an der Ausführung meiner Funktion, wenn es kontinuierlich Eingang, aber wenn es schließlich nach einiger Inaktivität ausgeführt wird, der Eingang für function()
scheint falsch zu sein .
Ein praktisches Beispiel nach dem obigen Code Start:
- schnellen Abfolge von Zeichen, dann keine Aktivität:
- Ein zusätzliche Zeichen (
b
) hinzugefügt, und keine Aktivität - die Länge wird aktualisiert (aber falsch, siehe unten)
- Erase alle Zeichen mit Rück in einer schnellen Folge:
- ein hinzufügen Charakter:
Es sieht so aus, als ob die Funktion auf dem vorletzten Wert von message
ausgeführt wird.
Könnte es sein, dass _.debounce
die vue.js data
behandelt, bevor es tatsächlich mit dem <input>
Wert aktualisiert wird?
Anmerkungen:
- sowohl mit
lodash
getestet undunderscore
, mit dem gleichen Ergebnis (für beidedebounce
undthrottle
Funktionen). - Getestet habe ich es auch auf JSFiddle im Falle würde es bei den Verfahren Änderungen verwendet
Aber das '_.debounce' nicht und gilt nur, verwenden Sie die Funktion auf verwischen. – haffla
@haffla Ja, deshalb habe ich es als alternativen Ansatz bezeichnet, aber dies ruft die Funktion nicht bei jedem Schlüsselstrich auf, sondern nur, wenn sie unscharf wird. – Saurabh
ja ich sehe. Interessant. Aber die Frage war, ob Unterstreichung mit Vue kompatibel ist, was es natürlich ist. – haffla