Evan You 12 лет назад
Родитель
Сommit
837b2d680a
2 измененных файлов с 25 добавлено и 10 удалено
  1. 8 4
      src/viewmodel.js
  2. 17 6
      test/unit/specs/viewmodel.js

+ 8 - 4
src/viewmodel.js

@@ -97,34 +97,37 @@ def(VMProto, '$emit', function () {
 
 // DOM convenience methods
 
-def(VMProto, '$appendTo', function (target) {
+def(VMProto, '$appendTo', function (target, cb) {
     target = query(target)
     var el = this.$el
     transition(el, 1, function () {
         target.appendChild(el)
+        if (cb) cb()
     }, this.$compiler)
 })
 
-def(VMProto, '$remove', function () {
+def(VMProto, '$remove', function (cb) {
     var el = this.$el,
         parent = el.parentNode
     if (!parent) return
     transition(el, -1, function () {
         parent.removeChild(el)
+        if (cb) cb()
     }, this.$compiler)
 })
 
-def(VMProto, '$before', function (target) {
+def(VMProto, '$before', function (target, cb) {
     target = query(target)
     var el = this.$el,
         parent = target.parentNode
     if (!parent) return
     transition(el, 1, function () {
         parent.insertBefore(el, target)
+        if (cb) cb()
     }, this.$compiler)
 })
 
-def(VMProto, '$after', function (target) {
+def(VMProto, '$after', function (target, cb) {
     target = query(target)
     var el = this.$el,
         parent = target.parentNode,
@@ -136,6 +139,7 @@ def(VMProto, '$after', function (target) {
         } else {
             parent.appendChild(el)
         }
+        if (cb) cb()
     }, this.$compiler)
 })
 

+ 17 - 6
test/unit/specs/viewmodel.js

@@ -216,7 +216,8 @@ describe('UNIT: ViewModel', function () {
     describe('DOM methods', function () {
 
         var enterCalled,
-            leaveCalled
+            leaveCalled,
+            callbackCalled
         
         var v = new Vue({
             attributes: {
@@ -239,14 +240,20 @@ describe('UNIT: ViewModel', function () {
         function reset () {
             enterCalled = false
             leaveCalled = false
+            callbackCalled = false
+        }
+
+        function cb () {
+            callbackCalled = true
         }
 
         it('$appendTo', function () {
             reset()
             var parent = document.createElement('div')
-            v.$appendTo(parent)
+            v.$appendTo(parent, cb)
             assert.strictEqual(v.$el.parentNode, parent)
             assert.ok(enterCalled)
+            assert.ok(callbackCalled)
         })
 
         it('$before', function () {
@@ -254,10 +261,11 @@ describe('UNIT: ViewModel', function () {
             var parent = document.createElement('div'),
                 ref = document.createElement('div')
             parent.appendChild(ref)
-            v.$before(ref)
+            v.$before(ref, cb)
             assert.strictEqual(v.$el.parentNode, parent)
             assert.strictEqual(v.$el.nextSibling, ref)
             assert.ok(enterCalled)
+            assert.ok(callbackCalled)
         })
 
         it('$after', function () {
@@ -267,27 +275,30 @@ describe('UNIT: ViewModel', function () {
                 ref2 = document.createElement('div')
             parent.appendChild(ref1)
             parent.appendChild(ref2)
-            v.$after(ref1)
+            v.$after(ref1, cb)
             assert.strictEqual(v.$el.parentNode, parent)
             assert.strictEqual(v.$el.nextSibling, ref2)
             assert.strictEqual(ref1.nextSibling, v.$el)
             assert.ok(enterCalled)
+            assert.ok(callbackCalled)
             reset()
-            v.$after(ref2)
+            v.$after(ref2, cb)
             assert.strictEqual(v.$el.parentNode, parent)
             assert.notOk(v.$el.nextSibling)
             assert.strictEqual(ref2.nextSibling, v.$el)
             assert.ok(enterCalled)
+            assert.ok(callbackCalled)
         })
 
         it('$remove', function () {
             reset()
             var parent = document.createElement('div')
             v.$appendTo(parent)
-            v.$remove()
+            v.$remove(cb)
             assert.notOk(v.$el.parentNode)
             assert.ok(enterCalled)
             assert.ok(leaveCalled)
+            assert.ok(callbackCalled)
         })
 
     })