From 0566b04a0ff9c5a7206e803f4fc7f497d1c4a31f Mon Sep 17 00:00:00 2001 From: Pierre-Yves Gerardy Date: Fri, 29 Jul 2016 15:23:06 +0200 Subject: [PATCH 1/3] Add test for `onbeforeremove` context. --- render/tests/test-onbeforeremove.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/render/tests/test-onbeforeremove.js b/render/tests/test-onbeforeremove.js index a289b055..69b1dc48 100644 --- a/render/tests/test-onbeforeremove.js +++ b/render/tests/test-onbeforeremove.js @@ -35,13 +35,17 @@ o.spec("onbeforeremove", function() { o(update.callCount).equals(0) }) o("calls onbeforeremove when removing element", function(done) { - var vnode = {tag: "div", attrs: {onbeforeremove: remove}} + var vnode = {tag: "div", attrs: { + oninit: function(){vnode.state = {}}, + onbeforeremove: remove + }} render(root, [vnode]) render(root, []) function remove(node, complete) { o(node).equals(vnode) + o(this).equals(vnode.state) o(root.childNodes.length).equals(1) o(root.firstChild).equals(vnode.dom) @@ -147,6 +151,7 @@ o.spec("onbeforeremove", function() { }) } }) + o("does not set onbeforeremove as an event handler", function() { var remove = o.spy() var vnode = {tag: "div", attrs: {onbeforeremove: remove}, children: []} @@ -156,6 +161,7 @@ o.spec("onbeforeremove", function() { o(vnode.dom.onbeforeremove).equals(undefined) o(vnode.dom.attributes["onbeforeremove"]).equals(undefined) }) + o("does not recycle when there's an onbeforeremove", function() { var remove = function(vnode, done) {done()} var vnode = {tag: "div", key: 1, attrs: {onbeforeremove: remove}} @@ -167,4 +173,8 @@ o.spec("onbeforeremove", function() { o(vnode.dom).notEquals(updated.dom) }) + + o("sets the onbeforeremove context to vnode.state", function(){ + var handler = o.spy() + }) }) From 72bc17e9b4ea8eccc77120be4c3004f93c538ce3 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Gerardy Date: Fri, 29 Jul 2016 15:15:10 +0200 Subject: [PATCH 2/3] Pass `vnode.state` as context to `onbeforeremove`. --- render/render.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/render/render.js b/render/render.js index eeffb3e1..57c3c3c3 100644 --- a/render/render.js +++ b/render/render.js @@ -337,11 +337,11 @@ module.exports = function($window) { } if (vnode.attrs && vnode.attrs.onbeforeremove) { expected++ - vnode.attrs.onbeforeremove.call(vnode, vnode, callback) + vnode.attrs.onbeforeremove.call(vnode.state, vnode, callback) } if (typeof vnode.tag !== "string" && vnode.tag.onbeforeremove) { expected++ - vnode.tag.onbeforeremove.call(vnode, vnode, callback) + vnode.tag.onbeforeremove.call(vnode.state, vnode, callback) } if (expected > 0) return } From bfc69267d5ecaee57119dfa809595cb412cc6654 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Gerardy Date: Fri, 29 Jul 2016 20:31:06 +0200 Subject: [PATCH 3/3] Remove a few crumbs I left behind --- render/tests/test-onbeforeremove.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/render/tests/test-onbeforeremove.js b/render/tests/test-onbeforeremove.js index 69b1dc48..e0bac902 100644 --- a/render/tests/test-onbeforeremove.js +++ b/render/tests/test-onbeforeremove.js @@ -151,7 +151,6 @@ o.spec("onbeforeremove", function() { }) } }) - o("does not set onbeforeremove as an event handler", function() { var remove = o.spy() var vnode = {tag: "div", attrs: {onbeforeremove: remove}, children: []} @@ -161,7 +160,6 @@ o.spec("onbeforeremove", function() { o(vnode.dom.onbeforeremove).equals(undefined) o(vnode.dom.attributes["onbeforeremove"]).equals(undefined) }) - o("does not recycle when there's an onbeforeremove", function() { var remove = function(vnode, done) {done()} var vnode = {tag: "div", key: 1, attrs: {onbeforeremove: remove}} @@ -173,8 +171,4 @@ o.spec("onbeforeremove", function() { o(vnode.dom).notEquals(updated.dom) }) - - o("sets the onbeforeremove context to vnode.state", function(){ - var handler = o.spy() - }) })