File tree 2 files changed +49
-4
lines changed
2 files changed +49
-4
lines changed Original file line number Diff line number Diff line change @@ -626,6 +626,7 @@ module.exports = function() {
626
626
if ( typeof vnode . tag !== "string" ) {
627
627
if ( vnode . instance != null ) onremove ( vnode . instance )
628
628
} else {
629
+ if ( vnode . events != null ) vnode . events . _ = null
629
630
var children = vnode . children
630
631
if ( Array . isArray ( children ) ) {
631
632
for ( var i = 0 ; i < children . length ; i ++ ) {
@@ -810,12 +811,12 @@ module.exports = function() {
810
811
var result
811
812
if ( typeof handler === "function" ) result = handler . call ( ev . currentTarget , ev )
812
813
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 . _ ) ( )
816
817
if ( result != null && typeof result . then === "function" ) {
817
818
Promise . resolve ( result ) . then ( function ( ) {
818
- if ( ev . redraw !== false ) eventRedraw ( )
819
+ if ( self . _ != null && ev . redraw !== false ) ( 0 , self . _ ) ( )
819
820
} )
820
821
}
821
822
}
Original file line number Diff line number Diff line change @@ -916,4 +916,48 @@ o.spec("event", function() {
916
916
} )
917
917
} )
918
918
} )
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
+ } )
919
963
} )
You can’t perform that action at this time.
0 commit comments