```coffeescript
kd                   = require 'kd'
KDView               = kd.View
KDListItemView       = kd.ListItemView
KDCustomHTMLView     = kd.CustomHTMLView
KDListViewController = kd.ListViewController


module.exports = class TeamMembersCommonView extends KDView

  constructor: (options = {}, data) ->

    options.noItemFoundWidget or= new KDCustomHTMLView
    options.listViewItemClass or= KDListItemView

    super options, data

    @createListController()
    @listMembers()


  createListController: ->

    { listViewItemClass, noItemFoundWidget } = @getOptions

    @listController       = new KDListViewController
      itemClass           : listViewItemClass
      noItemFoundWidget   : noItemFoundWidget
      startWithLazyLoader : yes
      lazyLoadThreshold   : .90
      lazyLoaderOptions   :
        spinnerOptions    :
          size            : width: 28

    @addSubView @listController.getView()


  ###*
    This method needs to be implemented in subclasses.

    @abstract
  ###
  listMembers: -> throw new Error 'Method needs to be implemented in subclasses'
```

Implement base fetch and listing flow.
user
```coffeescript
kd                   = require 'kd'
KDView               = kd.View
MemberItemView       = require './memberitemview'
KDListItemView       = kd.ListItemView
KDCustomHTMLView     = kd.CustomHTMLView
KDListViewController = kd.ListViewController


module.exports = class TeamMembersCommonView extends KDView

  constructor: (options = {}, data) ->

    options.noItemFoundWidget   or= new KDCustomHTMLView
    options.listViewItemClass   or= MemberItemView
    options.listViewItemOptions or= {}
    options.itemLimit            ?= 10

    super options, data

    @skip = 0

    @createListController()
    @fetchMembers()


  createListController: ->

    { listViewItemClass, noItemFoundWidget, listViewItemOptions } = @getOptions()

    @listController       = new KDListViewController
      viewOptions         :
        wrapper           : yes
        itemClass         : listViewItemClass
        itemOptions       : listViewItemOptions
      noItemFoundWidget   : noItemFoundWidget
      startWithLazyLoader : yes
      lazyLoadThreshold   : .90
      lazyLoaderOptions   :
        spinnerOptions    :
          size            : width: 28

    @addSubView @listController.getView()


  fetchMembers: ->

    selector = @query or ''
    options  =
      limit  : @getOptions().itemLimit
      sort   : { timestamp: -1 }
      skip   : @skip

    @getData().searchMembers selector, options, (err, members) =>
      return kd.warn err  if err
      @listMembers members


  listMembers: (members) ->

    return  unless members.length

    @skip += members.length

    for member in members
      @listController.addItem member

    @listController.lazyLoader.hide()
```
assistant