JSFiddle - React, Tailwind, and code Playground

HTML

<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone-min.js"></script>
<script id="template-list" type="text/template">
    <table>
        <thead>
            <tr>
                <th>First</th>
                <th>Last</th>
            </tr>
        </thead>
        <tbody>
        <% _(models).each(function(model) { %>
        <tr>
            <td><%= model.first %></td>
            <td><%= model.last %></td>
        </tr>
        <% }); %>
        </tbody>
    </table>
</script>

<div id='content'>
    <form>
        <input type='text' name='what' /><br />
        <input type='radio' name='where' value='all' checked /> All
        <input type='radio' name='where' value='first' /> First
        <input type='radio' name='where' value='all' /> LAst
    </form>
</div>

JavaScript

var BaseView = Backbone.View.extend({
    render:function() {
        var html, $oldel = this.$el, $newel;

        html = this.html();
        $newel=$(html);
        
        this.setElement($newel);
        $oldel.replaceWith($newel);

        return this;
    }
});
var CollectionView = BaseView.extend({
	initialize: function(opts) {
        this.template = opts.template;
        this.listenTo(this.collection, 'reset', this.render);
	},
	html: function() {
        return this.template({
            models: this.collection.toJSON()
        });
	}
});
var FormView = Backbone.View.extend({
    events: {
        'keyup input[name="what"]': _.throttle(function(e) {
             this.model.set('what', e.currentTarget.value);
        }, 200) ,
        'click input[name="where"]': function(e) {
            this.model.set('where', e.currentTarget.value);
        }
    }
});

var Filter = Backbone.Model.extend({
    defaults: {
        what: '',
        where: 'all'
    },
    initialize: function(opts) {
        this.collection = opts.collection;
        this.filtered = new Backbone.Collection(opts.collection.models);
        this.on('change:what change:where', this.filter);
    },
    filter: function() {
        var what = this.get('what').trim(),
            where = this.get('where'),
            lookin = (where==='all') ? ['first', 'last'] : where,
            models;
        
        if (what==='') {
            models = this.collection.models;            
        } else {
            models = this.collection.filter(function(model) {
                return _.some(_.values(model.pick(lookin)), function(value) {
                    return ~value.toLowerCase().indexOf(what);
                });
            });
        }

        this.filtered.reset(models);
    }
});


var people = new Backbone.Collection([
    {first: 'John', last: 'Doe'},
    {first: 'Mary', last: 'Jane'},
    {first: 'Billy', last: 'Bob'},
    {first: 'Dexter', last: 'Morgan'},
    {first:...