JSFiddle - React, Tailwind, and code Playground

HTML

<script src="http://documentcloud.github.com/underscore/underscore.js"></script>
<script src="http://backbonejs.org/backbone.js"></script>

<script type="text/template" id="base-tempate">
    <div class="primary"></div>
    <div class="secondary"></div>
</script>

CSS

select { width: 150px }

JavaScript

(function(j, b, u){
    var ItemModel = b.Model.extend({
        itemsCollection: null,
        
        defaults: {
            label: '-',
            items: [],
            selected: false
        },
        
        initialize: function(){
            if(this.get('items').length > 0){
                this.set('label', this.get('label') + ' >');
                this.itemsCollection = new ItemsCollection(this.get('items'));
            }
        }
    });
    
    var ItemsCollection = b.Collection.extend({
        model: ItemModel,
        selectedModel: null,

        initialize: function(){
            this.on('reset', this.setupDefaultProperties, this);
            this.setupDefaultProperties();
        },
        
        setupDefaultProperties: function(){
            this.selectedModel = this.at(0) || new this.model;
            this.trigger('changeSelectedItem');
        }
    });
    
    var ItemSelectView = b.View.extend({
        tagName: 'option',
        
        render: function(){
            this.$el.html(this.model.get('label'));
            return this;
        }
    });
    
    var SelectView = b.View.extend({
        tagName: 'select',
        itemViews: [],
        
        events: {
            'change': 'changeItem'
        },
        
        initialize: function(options){
            this.template = u.template(j('#base-tempate').html());
            this.collection.on('reset', this.render, this);
        },
        
        changeItem: function(){
            u.each(this.itemViews, function(view){
                if(view.el === this.el.options[this.el.selectedIndex]){
                    this.collection.selectedModel = view.model;
                    this.collection.trigger('changeSelectedItem');
                }
            }, this);
        },
        
        renderOne: function(model){
            var view = new ItemSelectView({ model: model });
            
            this.itemViews.push(view);
           ...