Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Implementing Backbone.Subset.js in Backbone.js to filter Models from a parent Collection

In this stackoverflow post i read about filtering backbone collections and using subsets.

One answer (by sled) recommends using backbone.subset.js (usage example).

I could not find any further resources on backbone.subset.js and I failed implementing it into my project.

It seems like backbone.subset.js is the perfect solution for what i'm trying to achieve.

(Having one "parent" collection that holds all models at all times, and depending on user input filtering the relevant models from the parent collection into a backbone.subset collection.)

My "parent" collection, holding all tasks:

var TasksAll = Backbone.Collection.extend({
    url: '/tasks', // the REST url to retrieve collection data
    model: Task // the models of which the collection consists of
});
var allTasks = new TasksAll();

Now i want to create a subset collection for e.g. tasks where task.status = 0:

var TasksTrash = new Backbone.Subset({
    superset: allTasks,
    filter: function(Task) {
        return Task.isTrash();
    }
});
var trashTasks = new TasksTrash();

Whereas inside the Task model, the method "isTrash" returns true if:

this.get('status') == 0

a) Are there any more resources on backbone.subset.js?

b) How do I implement above scenario?

c) Can I pass 'superset' and 'filter' options as params to the Backbone.Subset init function?

d) I looked into the backbone.subset.js code, when I 'reset' my parent Collection my subset Collections should be updated straight away, right?

PS: I'm fairly new to Backbone. Thanks for your help.

like image 560
BenHas Avatar asked Nov 21 '11 16:11

BenHas


1 Answers

Looking at the source for backbone-subset, it looks as though there is a pre-initialization hook which you could utilize in order to make the 'sieve' or filter available as an option or argument:

https://github.com/masylum/Backbone.Subset/blob/master/backbone.subset.js#L50

As for providing parent as an argument, there is an outstanding patch to add that exact functionality:

https://github.com/masylum/Backbone.Subset/pull/5

With it, you can pass in parent as an option, if it is not an option the library will fall back to looking for it on the object Prototype

like image 82
alexwen Avatar answered Oct 12 '22 14:10

alexwen