         setSelection: React.PropTypes.func
         displayLimit: React.PropTypes.number
         syncOptions:  React.PropTypes.any
+        fetchWhenOpen: React.PropTypes.bool
+
+    getDefaultProps: ->
+        labelField: 'label', idField: 'id', displayLimit: 30, syncOptions: {}, fetchWhenOpen: true
 
     dataObjects:
+        model: 'props'
         collection: ->
             @props.collection || (
-                @props.model?.associations.collectionFor(@props.name, @props.model)
+                @props.model?.associations?.collectionFor(@props.name, @props.model)
             )
 
-    onChange: (selection) ->
-        return unless  _.isString(selection)
-        order = @props.queryOrder || { "#{@props.labelField}": 'desc' }
-        options = { limit: @props.displayLimit, order}
-        unless _.isEmpty(selection)
-            options.query = {
-                "#{@props.labelField}": { op: 'like', value: selection }
-            }
-
-        @collection.fetch(options)
-
-    onSelect: (selections) ->
+    onChange: (selections) ->
         selections = [selections] unless _.isArray(selections)
         records = _.map selections, (selection) =>
             @collection.get(selection.id)

            onChange={@onChange}
            name={@props.name}
            {...props}
            value={@getCurrentSelection().id}
            />

        if @props.unstyled
            select

            ref="select"
            open={@state.isOpen}
            onToggle={@onToggle}
            suggest={true}
            data={@_getChoices()}
            valueField="id"
