       @confirmSelection() if $(e.target).closest('li').hasClass('selected')
       e.preventDefault()
 
-  schedulePopulateList: ->
-    clearTimeout(@scheduleTimeout)
-    populateCallback = =>
-      @populateList() if @isOnDom()
-    @scheduleTimeout = setTimeout(populateCallback,  @inputThrottle)
+  ###
+  Section: Methods that must be overridden
+  ###
+
+  # Public: Create a view for the given model item.
+  #
+  # This method must be overridden by subclasses.
+  #
+  # This is called when the item is about to appended to the list view.
+  #
+  # * `item` The model item being rendered. This will always be one of the items
+  #   previously passed to {::setItems}.
+  #
+  # Returns a String of HTML, DOM element, jQuery object, or View.
+  viewForItem: (item) ->
+    throw new Error("Subclass must implement a viewForItem(item) method")
+
+  # Public: Callback function for when an item is selected.
+  #
+  # This method must be overridden by subclasses.
+  #
+  # * `item` The selected model item. This will always be one of the items
+  #   previously passed to {::setItems}.
+  #
+  # Returns a DOM element, jQuery object, or {View}.
+  confirmed: (item) ->
+    throw new Error("Subclass must implement a confirmed(item) method")
+
+  ###
+  Section: Managing the list of items
+  ###
 
   # Public: Set the array of items to display in the list.
   #

  setItems: (@items=[]) ->
    @populateList()
    @setLoading()

  # Public: Set the error message to display.
  #

  # Returns a {String} message (default: 'No matches found').
  getEmptyMessage: (itemCount, filteredItemCount) -> 'No matches found'

  ###
  Section: View Actions
  ###

  # Public: Focus the fuzzy filter editor view.
  focusFilterEditor: ->
    @filterEditorView.focus()

  # Public: Cancel and close this select list view.
  #
