easierbycode
12/22/2011 - 5:38 PM

search with backbone collections

search with backbone collections

SearchResults = Backbone.Collection.extend({
  url: function(){
    return "/items/" + this.searchTerm;
  }
});
SearchResults = Backbone.Collection.extend({
  url: function(){
    return "/items/" + this.searchTerm;
  }
}, {
  search: function(searchTerm){
    var results = new SearchResults();
    results.searchTerm = "some search term";
    results.fetch({
      success: function(){
        MyApp.vent.trigger("search:results", results);
      },
      error: function(collection, response){
        MyApp.vent.trigger("search:error", response);
      }
    }); 
  }
});
// handle the search results in a view
Backbone.View.extend({
  initialize: function(){
    MyApp.vent.bind("search:results", this.showResults, this);
  },

  showResults: function(results){
    this.collection = results;
    this.render();
  },
  
  render: function(){
    var html = $("#some-template").tmpl(this.collection.toJSON());
    $(this.el).html(html);
  }
});

// do the actual search, based on a search
// term that was entered in to the search box
SearchResults.search("some search term");
var results = new SearchResults();
results.searchTerm = "some search term";
results.fetch({
  success: someView.showTheResults
});