Skip to content

Commit 5980dfe

Browse files
committed
core.Observable: not removing listeners with "once" properly, for multiple occurrences on the same event target #6635
1 parent 5c47b5d commit 5980dfe

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

src/core/Observable.mjs

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Base from './Base.mjs';
2+
import NeoArray from '../util/Array.mjs';
23
import {resolveCallback} from '../util/Function.mjs';
34

45
/**
@@ -182,7 +183,7 @@ class Observable extends Base {
182183

183184
// remove the listener if the scope no longer exists
184185
if (cb.scope && !cb.scope.id) {
185-
listeners[name].splice(i, 1)
186+
NeoArray.remove(listeners[name], handler)
186187
} else {
187188
if (!me.suspendEvents) {
188189
// Object event format. Inject firer reference in as 'source'
@@ -191,7 +192,7 @@ class Observable extends Base {
191192
}
192193

193194
// remove the listener if it has the once flag
194-
handler.once && listeners[name].splice(i, 1)
195+
handler.once && NeoArray.remove(listeners[name], handler);
195196

196197
if (Neo.isNumber(delay) && delay > 0) {
197198
me.delayedCallback(cb, handler.data ? args.concat(handler.data) : args, delay)

0 commit comments

Comments
 (0)