Added vnode as last argument to event handler

pull/146/head
Kayo Phoenix 9 years ago
parent 831bd0e1ee
commit 174941c6a4

@ -1,14 +1,14 @@
function invokeHandler(handler, vnode, event) {
if (typeof handler === "function") {
// call function handler
handler.call(vnode, event);
handler.call(vnode, event, vnode);
} else if (typeof handler === "object") {
// call handler with arguments
if (typeof handler[0] === "function") {
// special case for single argument for performance
handler.length === 2 ?
handler[0].call(vnode, handler[1], event) :
handler[0].apply(vnode, handler.slice(1).concat(event));
handler[0].call(vnode, handler[1], event, vnode) :
handler[0].apply(vnode, handler.slice(1).concat(event, vnode));
} else {
// call multiple handlers
for (var i = 0; i < handler.length; i++) {

@ -69,7 +69,7 @@ describe('event listeners', function() {
});
it('handles changed several values in array', function() {
var result = [];
function clicked() { result.push([].slice.call(arguments, 0, arguments.length-1)); }
function clicked() { result.push([].slice.call(arguments, 0, arguments.length-2)); }
var vnode1 = h('div', {on: {click: [clicked, 1, 2, 3]}}, [
h('a', 'Click my parent'),
]);
@ -121,14 +121,39 @@ describe('event listeners', function() {
});
it('access to virtual node in event handler', function() {
var result = [];
function clicked(ev) { result.push(this); }
function clicked(ev, vnode) { result.push(this); result.push(vnode); }
var vnode1 = h('div', {on: {click: clicked }}, [
h('a', 'Click my parent'),
]);
elm = patch(vnode0, vnode1).elm;
elm.click();
assert.equal(1, result.length);
assert.equal(2, result.length);
assert.equal(vnode1, result[0]);
assert.equal(vnode1, result[1]);
}),
it('access to virtual node in event handler with argument', function() {
var result = [];
function clicked(arg, ev, vnode) { result.push(this); result.push(vnode); }
var vnode1 = h('div', {on: {click: [clicked, 1] }}, [
h('a', 'Click my parent'),
]);
elm = patch(vnode0, vnode1).elm;
elm.click();
assert.equal(2, result.length);
assert.equal(vnode1, result[0]);
assert.equal(vnode1, result[1]);
}),
it('access to virtual node in event handler with arguments', function() {
var result = [];
function clicked(arg1, arg2, ev, vnode) { result.push(this); result.push(vnode); }
var vnode1 = h('div', {on: {click: [clicked, 1, "2"] }}, [
h('a', 'Click my parent'),
]);
elm = patch(vnode0, vnode1).elm;
elm.click();
assert.equal(2, result.length);
assert.equal(vnode1, result[0]);
assert.equal(vnode1, result[1]);
});
it('shared handlers in parent and child nodes', function() {
var result = [];

Loading…
Cancel
Save