|
|
@ -4,10 +4,19 @@ import { updateListeners } from 'core/vdom/helpers/update-listeners' |
|
|
|
|
|
|
|
let target: any |
|
|
|
|
|
|
|
function createOnceHandler (event, handler, capture) { |
|
|
|
const _target = target // save current target element in closure
|
|
|
|
return function onceHandler () { |
|
|
|
const res = handler.apply(null, arguments) |
|
|
|
if (res !== null) { |
|
|
|
remove(event, onceHandler, capture, _target) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
function add ( |
|
|
|
event: string, |
|
|
|
handler: Function, |
|
|
|
once: boolean, |
|
|
|
capture: boolean, |
|
|
|
passive?: boolean, |
|
|
|
params?: Array<any> |
|
|
@ -16,18 +25,6 @@ function add ( |
|
|
|
console.log('Weex do not support event in bubble phase.') |
|
|
|
return |
|
|
|
} |
|
|
|
if (once) { |
|
|
|
const oldHandler = handler |
|
|
|
const _target = target // save current target element in closure
|
|
|
|
handler = function (ev) { |
|
|
|
const res = arguments.length === 1 |
|
|
|
? oldHandler(ev) |
|
|
|
: oldHandler.apply(null, arguments) |
|
|
|
if (res !== null) { |
|
|
|
remove(event, null, null, _target) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
target.addEvent(event, handler, params) |
|
|
|
} |
|
|
|
|
|
|
@ -47,7 +44,7 @@ function updateDOMListeners (oldVnode: VNodeWithData, vnode: VNodeWithData) { |
|
|
|
const on = vnode.data.on || {} |
|
|
|
const oldOn = oldVnode.data.on || {} |
|
|
|
target = vnode.elm |
|
|
|
updateListeners(on, oldOn, add, remove, vnode.context) |
|
|
|
updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context) |
|
|
|
target = undefined |
|
|
|
} |
|
|
|
|
|
|
|