.. _tw_cookbook_extsingleselectcombo:

ExtJS SingleSelectCombo Widget
==============================


Installation
------------

::
  
  easy_install tw.extjs


Usage
-----

The SingleSelectCombo widget is a widget derived from the
SingleSelectField widget and thus supports all parameters and
validation rules supported by a SingleSelectField. In addition it
renders the widget as a ComboBox allowing autocomplete and write ahead
features. All defined in the ExtJS ComboBox widget API can be used by
extending this widget. In its present form, in addition to the
SingleSelectField parameters, it supports the following:

Mandatory Parameters:
~~~~~~~~~~~~~~~~~~~~~

* **id** The element id of the select field element.

Optional Parameters:
~~~~~~~~~~~~~~~~~~~~

* **typeAhead** Whether the remaining portion of the field will be
    automatically populated by the first matching option. (*Default:*
    True)
* **triggerAction** Action to execute when the trigger field is
    activated. (*Default:* 'all')
* **width** The width of the field in px. (*Default:* 'auto')
* **forceSelection** Whether to restrict the user to enter values
    available in the options list. Setting it to *False* will allow
    the user to enter arbitrary values in the field. (*Default:* True)

In its simplest form the widget can be instantiated as follows::

    from tw.extjs import SingleSelectCombo

    select_options = [('AL','Alabama'), ('AK','Alaska'), ('AZ','Arizona'), ...... ('WY','Wyoming')]

    ssc = SingleSelectCombo(id="states", options=select_options)

It can be then served up to the user via a controller method like
this::
  
   @expose('mypackage.templates.myformtemplate')
   def entry(self, **kw):
       pylons.c.field = ssc
       return dict(value=kw)

The widget can then be displayed in the template like this::

   ${tmpl_context.field(value=value)}

This is how it looks like in the browser:

.. image:: ../images/singleselectcombo.png
    :alt: example SingleSelectCombo Field

.. todo:: Difficulty: Medium. extend tutorial to include the SingleSelectCombo widget in a Form
.. todo:: Difficulty: Medium. extend the tutorial to populate the options list by sending a JSON request
.. todo:: Difficulty: Medium. extend the tutorial to have form field validation
