fix event removal in diff

fix CI
This commit is contained in:
Leo Horie 2016-08-12 22:08:02 -04:00
parent fc9d4f2ee4
commit 6c3036e5c6
10 changed files with 37 additions and 67 deletions

View file

@ -421,7 +421,8 @@ module.exports = function($window) {
if (old != null) {
for (var key in old) {
if (attrs == null || !(key in attrs)) {
if (key !== "key") vnode.dom.removeAttribute(key)
if (key[0] === "o" && key[1] === "n" && !isLifecycleMethod(key)) updateEvent(vnode, key, undefined)
else if (key !== "key") vnode.dom.removeAttribute(key)
}
}
}
@ -470,8 +471,10 @@ module.exports = function($window) {
var eventName = key.slice(2)
if (vnode.events === undefined) vnode.events = {}
if (vnode.events[key] != null) element.removeEventListener(eventName, vnode.events[key], false)
vnode.events[key] = callback
element.addEventListener(eventName, vnode.events[key], false)
if (typeof value === "function") {
vnode.events[key] = callback
element.addEventListener(eventName, vnode.events[key], false)
}
}
}

View file

@ -33,6 +33,21 @@ o.spec("event", function() {
o(onevent.args[0].type).equals("click")
o(onevent.args[0].target).equals(div.dom)
})
o("removes event", function() {
var spy = o.spy()
var vnode = {tag: "a", attrs: {onclick: spy}}
var updated = {tag: "a", attrs: {}}
render(root, [vnode])
render(root, [updated])
var e = $window.document.createEvent("MouseEvents")
e.initEvent("click", true, true)
vnode.dom.dispatchEvent(e)
o(spy.callCount).equals(0)
})
o("fires onclick only once after redraw", function() {
var spy = o.spy()