|
@@ -1,44 +1,40 @@
|
|
|
/* @flow */
|
|
/* @flow */
|
|
|
|
|
|
|
|
-import { remove } from 'shared/util'
|
|
|
|
|
-
|
|
|
|
|
export default {
|
|
export default {
|
|
|
- create (_: any, vnode: VNodeWithData) {
|
|
|
|
|
- registerRef(vnode)
|
|
|
|
|
- },
|
|
|
|
|
- update (oldVnode: VNodeWithData, vnode: VNodeWithData) {
|
|
|
|
|
- if (oldVnode.data.ref !== vnode.data.ref) {
|
|
|
|
|
- registerRef(oldVnode, true)
|
|
|
|
|
- registerRef(vnode)
|
|
|
|
|
- }
|
|
|
|
|
- },
|
|
|
|
|
- destroy (vnode: VNodeWithData) {
|
|
|
|
|
- registerRef(vnode, true)
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ create: registerRef,
|
|
|
|
|
+ update: registerRef
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-export function registerRef (vnode: VNodeWithData, isRemoval: ?boolean) {
|
|
|
|
|
|
|
+export function registerRef (_: any, vnode: VNodeWithData) {
|
|
|
const key = vnode.data.ref
|
|
const key = vnode.data.ref
|
|
|
if (!key) return
|
|
if (!key) return
|
|
|
|
|
|
|
|
- const vm = vnode.context
|
|
|
|
|
const ref = vnode.componentInstance || vnode.elm
|
|
const ref = vnode.componentInstance || vnode.elm
|
|
|
- const refs = vm.$refs
|
|
|
|
|
- if (isRemoval) {
|
|
|
|
|
- if (Array.isArray(refs[key])) {
|
|
|
|
|
- remove(refs[key], ref)
|
|
|
|
|
- } else if (refs[key] === ref) {
|
|
|
|
|
- refs[key] = undefined
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- if (vnode.data.refInFor) {
|
|
|
|
|
- if (Array.isArray(refs[key]) && refs[key].indexOf(ref) < 0) {
|
|
|
|
|
- refs[key].push(ref)
|
|
|
|
|
- } else {
|
|
|
|
|
- refs[key] = [ref]
|
|
|
|
|
|
|
+ const refs = vnode.context.$refs
|
|
|
|
|
+
|
|
|
|
|
+ if (typeof key === 'function') {
|
|
|
|
|
+ key(ref)
|
|
|
|
|
+ } else if (vnode.data.refInFor) {
|
|
|
|
|
+ const refArray = refs[key]
|
|
|
|
|
+ if (Array.isArray(refArray)) {
|
|
|
|
|
+ if (refArray.indexOf(ref) < 0) {
|
|
|
|
|
+ refArray.push(ref)
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
- refs[key] = ref
|
|
|
|
|
|
|
+ refs[key] = [ref]
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ refs[key] = ref
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+export function resetRefs (refs: Refs): Refs {
|
|
|
|
|
+ const res = {}
|
|
|
|
|
+ // keep existing v-for ref arrays even if empty
|
|
|
|
|
+ for (const key in refs) {
|
|
|
|
|
+ if (Array.isArray(refs[key])) {
|
|
|
|
|
+ res[key] = []
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ return res
|
|
|
}
|
|
}
|