Skip to content

Instantly share code, notes, and snippets.

@kjantzer
Last active October 13, 2015 20:07
Show Gist options
  • Save kjantzer/4248444 to your computer and use it in GitHub Desktop.
Save kjantzer/4248444 to your computer and use it in GitHub Desktop.
Backbone.js: sortable collection
var SortableCollection = Backbone.Collection.extend({
//key: 'LocalStorageKey', // define a key for saving sort info to local storage
//defaultSort: 'some_key', // the default key to sort by
defaultDesc: false,
localStoreKey: function(extra){
return 'list:'+this.key+(extra?':'+extra:'');
},
/*
Sort Key - defaults to "release date"
*/
sortKey: function(newKey){
if(newKey !== undefined)
amplify.store('list:'+this.key+':sort', newKey);
else
return amplify.store('list:'+this.key+':sort') || this.defaultSort;
},
/*
Sort Descending
*/
sortDesc: function(desc){
if(desc !== undefined)
return amplify.store('list:'+this.key+':sort:desc', desc);
else
return amplify.store('list:'+this.key+':sort:desc') || this.defaultDesc;
},
/*
Sort By - overriding default sort by behaviour to add in reverse order logic
*/
sortBy: function(){
var models = _.sortBy(this.models, this.comparator, this);
if(this.sortDesc())
models.reverse();
return models;
},
/*
Comparator - How to sort;
*/
comparator: function(model){
return model.get( this.sortKey() );
},
/*
Change how this collection is sorted
*/
changeSort: function(sortKey){
// if same sort key was clicked, lets reverse the sort direction
if(this.sortKey() == sortKey)
this.sortDesc( !this.sortDesc() ); // set direction to opposite of what it is now
// set the new sort key
this.sortKey( sortKey );
this.trigger('sort:change');
// re-sort the collection
this.sort();
}
});
@NarendraPolasam
Copy link

Hi ,

I am working on backbone, i need one help.

I have one collection i want to sorting asc, desc by date. i don't have idea how to with collection.

Request you to me help on that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment