File tree Expand file tree Collapse file tree 2 files changed +49
-4
lines changed
Expand file tree Collapse file tree 2 files changed +49
-4
lines changed Original file line number Diff line number Diff line change @@ -626,6 +626,7 @@ module.exports = function() {
626626 if ( typeof vnode . tag !== "string" ) {
627627 if ( vnode . instance != null ) onremove ( vnode . instance )
628628 } else {
629+ if ( vnode . events != null ) vnode . events . _ = null
629630 var children = vnode . children
630631 if ( Array . isArray ( children ) ) {
631632 for ( var i = 0 ; i < children . length ; i ++ ) {
@@ -810,12 +811,12 @@ module.exports = function() {
810811 var result
811812 if ( typeof handler === "function" ) result = handler . call ( ev . currentTarget , ev )
812813 else if ( typeof handler . handleEvent === "function" ) handler . handleEvent ( ev )
813- var eventRedraw = this . _
814- if ( eventRedraw ) {
815- if ( ev . redraw !== false ) eventRedraw ( )
814+ var self = this
815+ if ( self . _ != null ) {
816+ if ( ev . redraw !== false ) ( 0 , self . _ ) ( )
816817 if ( result != null && typeof result . then === "function" ) {
817818 Promise . resolve ( result ) . then ( function ( ) {
818- if ( ev . redraw !== false ) eventRedraw ( )
819+ if ( self . _ != null && ev . redraw !== false ) ( 0 , self . _ ) ( )
819820 } )
820821 }
821822 }
Original file line number Diff line number Diff line change @@ -916,4 +916,48 @@ o.spec("event", function() {
916916 } )
917917 } )
918918 } )
919+ o ( "avoid sync redraw after removal" , function ( ) {
920+ var div = m ( "div" , { onclick : function ( ) { } } )
921+ var e = $window . document . createEvent ( "MouseEvents" )
922+ e . initEvent ( "click" , true , true )
923+
924+ render ( root , div )
925+ // remove div
926+ render ( root , [ ] )
927+
928+ div . dom . dispatchEvent ( e )
929+
930+ o ( redraw . callCount ) . equals ( 0 )
931+ } )
932+ o ( "avoid async redraw after removal" , function ( done ) {
933+ var thenCB
934+ var div = m ( "div" , { onclick : async function ( ) {
935+ await new Promise ( function ( resolve ) { thenCB = resolve } )
936+ } } )
937+ var e = $window . document . createEvent ( "MouseEvents" )
938+ e . initEvent ( "click" , true , true )
939+
940+ render ( root , div )
941+ div . dom . dispatchEvent ( e )
942+
943+ o ( redraw . callCount ) . equals ( 1 )
944+ o ( redraw . this ) . equals ( undefined )
945+ o ( redraw . args . length ) . equals ( 0 )
946+
947+ callAsync ( function ( ) {
948+ // not resolved yet
949+ o ( redraw . callCount ) . equals ( 1 )
950+
951+ // remove div
952+ render ( root , [ ] )
953+
954+ // resolve
955+ thenCB ( )
956+ callAsync ( function ( ) {
957+ o ( redraw . callCount ) . equals ( 1 )
958+
959+ done ( )
960+ } )
961+ } )
962+ } )
919963} )
You can’t perform that action at this time.
0 commit comments