@@ -37,6 +37,7 @@ function Transition (el, id, hooks, vm) {
3737 this . op =
3838 this . cb = null
3939 this . justEntered = false
40+ this . entered = this . left = false
4041 this . typeCache = { }
4142 // bind
4243 var self = this
@@ -79,7 +80,11 @@ p.enter = function (op, cb) {
7980 this . cb = cb
8081 addClass ( this . el , this . enterClass )
8182 op ( )
83+ this . entered = false
8284 this . callHookWithCb ( 'enter' )
85+ if ( this . entered ) {
86+ return // user called done synchronously.
87+ }
8388 this . cancel = this . hooks && this . hooks . enterCancelled
8489 queue . push ( this . enterNextTick )
8590}
@@ -117,6 +122,7 @@ p.enterNextTick = function () {
117122 */
118123
119124p . enterDone = function ( ) {
125+ this . entered = true
120126 this . cancel = this . pendingJsCb = null
121127 removeClass ( this . el , this . enterClass )
122128 this . callHook ( 'afterEnter' )
@@ -150,7 +156,11 @@ p.leave = function (op, cb) {
150156 this . op = op
151157 this . cb = cb
152158 addClass ( this . el , this . leaveClass )
159+ this . left = false
153160 this . callHookWithCb ( 'leave' )
161+ if ( this . left ) {
162+ return // user called done synchronously.
163+ }
154164 this . cancel = this . hooks && this . hooks . leaveCancelled
155165 // only need to handle leaveDone if
156166 // 1. the transition is already done (synchronously called
@@ -189,6 +199,7 @@ p.leaveNextTick = function () {
189199 */
190200
191201p . leaveDone = function ( ) {
202+ this . left = true
192203 this . cancel = this . pendingJsCb = null
193204 this . op ( )
194205 removeClass ( this . el , this . leaveClass )
0 commit comments