39ac0bf436a252c5b72dc510251901b73e94ccfa2b253a31b0ab199311ca340ba9dbd2bad6ce42f459d2d70f359efd0e6fa32bb6a3efd3e516f57ca869e2da 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. /* @flow */
  2. import { warn } from 'core/util/debug'
  3. import { handleError } from 'core/util/error'
  4. import { RECYCLE_LIST_MARKER } from 'weex/util/index'
  5. import { createComponentInstanceForVnode } from 'core/vdom/create-component'
  6. import { resolveVirtualComponent } from './virtual-component'
  7. export function isRecyclableComponent (vnode: VNodeWithData): boolean {
  8. return vnode.data.attrs
  9. ? (RECYCLE_LIST_MARKER in vnode.data.attrs)
  10. : false
  11. }
  12. export function renderRecyclableComponentTemplate (vnode: MountedComponentVNode): VNode {
  13. // $flow-disable-line
  14. delete vnode.data.attrs[RECYCLE_LIST_MARKER]
  15. resolveVirtualComponent(vnode)
  16. const vm = createComponentInstanceForVnode(vnode)
  17. const render = (vm.$options: any)['@render']
  18. if (render) {
  19. try {
  20. return render.call(vm)
  21. } catch (err) {
  22. handleError(err, vm, `@render`)
  23. }
  24. } else {
  25. warn(
  26. `@render function not defined on component used in <recycle-list>. ` +
  27. `Make sure to declare \`recyclable="true"\` on the component's template.`,
  28. vm
  29. )
  30. }
  31. }