Testing Filtered Backbone Collections (child sync)

by Aubrey Taylor

HTML

<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js"></script>

JavaScript

var data, root, filterset, child, updateChild;

data = [{
    'title': 'foo',
    'complete': false
}, {
    'title': 'bar',
    'complete': false
}, {
    'title': 'baz',
    'complete': false
}, {
    'title': 'qux',
    'complete': true
}, {
    'title': 'dog',
    'complete': true
}, {
    'title': 'cat',
    'complete': true
}];

updateChild = function(child, list, filter) {
    child.reset(list.where(filter));
    console.log('child after updateChild: ', child);
    console.log('');
};

root = new Backbone.Collection(data);
filterset = root.where({complete: true});
child = new Backbone.Collection(filterset);

console.log('orig child: ', child);
console.log('');

root.on('add', function(model, list, opts) {
    updateChild(child, list, {complete:true});
});

console.log('adding item to root, should append to child');
console.log('root: ', root);
console.log('');

root.add({title: 'foop', complete: true});

console.log('adding item to root, should *not* append to child');
console.log('root: ', root);
console.log('');

root.add({title: 'barp', complete: false});