Skip to content

Commit

Permalink
add callback to dom methods
Browse files Browse the repository at this point in the history
  • Loading branch information
yyx990803 committed Dec 20, 2013
1 parent f9bebc7 commit 837b2d6
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 10 deletions.
12 changes: 8 additions & 4 deletions src/viewmodel.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -136,6 +139,7 @@ def(VMProto, '$after', function (target) {
} else {
parent.appendChild(el)
}
if (cb) cb()
}, this.$compiler)
})

Expand Down
23 changes: 17 additions & 6 deletions test/unit/specs/viewmodel.js
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,8 @@ describe('UNIT: ViewModel', function () {
describe('DOM methods', function () {

var enterCalled,
leaveCalled
leaveCalled,
callbackCalled

var v = new Vue({
attributes: {
Expand All @@ -239,25 +240,32 @@ 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 () {
reset()
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 () {
Expand All @@ -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)
})

})
Expand Down

0 comments on commit 837b2d6

Please sign in to comment.