I have a Collection App.listingList where subsequent fetch() are called with add:true. 
App.listingList.fetch({
        data: {some:data},
        processData: true,
        add: true
});
Problem: How can the newly added models have their views rendered, without re-rendering the views of the existing models. This means I cannot do:
this.collection.each( function(listing, index) {
    new ListingMarkerView({ model:listing }).render();
}, this);
Attempt #1
Rendering the View on the collection's add event, I cannot figure out a way to access the new models to render
ListingListView = Backbone.View.extend({
    initialize: function() {
        this.collection.bind('add', this.renderNew, this);
    },
    render: function() {
        console.log('render ListingListView');
        this.collection.each( function(listing, index) {
            new ListingMarkerView({ model:listing }).render();
        }, this);
        return this;
    },
    renderNew: function() {
        // How do I grab the new models?
        new ListingMarkerView({ model:listing }).render(); // wont work
        return this;
    }
});
Attempt #2
I tried having a second Collection to do the subsequent fetch on, and compare the models of both collections using underscore.js's _.without(), but the array returned still contains the elements found in the 2nd array passed as the parameter. Using _difference() also returned the same array passed as the first array.
App.listingListNew.fetch({
        data: {some:data},
        processData: true,
        success: function() {
            console.log(App.listingListNew.models);
            console.log(App.listingList.models);
            console.log(_.without(App.listingListNew.models, App.listingList.models));
            console.log(_.difference(App.listingListNew.models, App.listingList.models));
        }
});
console.log Output
Since I passed in 2 identical arrays into _.difference() and _.without(), the output should be []. But it isnt :/ Maybe because cid is different, so every one of them are treated as unique?

When you do a collection.bind('add', this.renderNew, this); it automatically passes the added model to your method as an argument.
Include the argument in your method and you should have access to the new model.
renderNew: function(newModel) {
    new ListingMarkerView({ model:newModel }).render();
    return this;
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With