9-bits
9-bits

Reputation: 10765

Backbone sync on collection add

I'm adding an item to my backbone collection like this:

item = existingItem.clone()
myCollection.add(item)

I have overwritten sync in MyCollection like this:

sync: function() {
  console.log('sync is called')
}

however it seems that sync does not get called after the add - which executes successfully and fires an 'add' event. Am I missing something? or is this the correct behavior?

Upvotes: 1

Views: 3022

Answers (2)

Pascal
Pascal

Reputation: 8939

Collection.create returns the model, but in some cases you might need access to the xhr object. In that case you can do:

// add the model to the collection first
// so that model.url() will reference the collection's URL
myCollection.add(myModel)

// now save. this will trigger a POST to the collection URL
// save() returns the xhr so we can attach .done/.fail handlers
myModel.save()
.done(function(res) {
    console.log('it worked')
})
.fail(function(err) {
    console.log('it failed')
    // might be a good idea to remove the model from the collection
    // since it's not on the server
    myCollection.remove(myModel)
})

Upvotes: 0

fguillen
fguillen

Reputation: 38772

What you want is myCollection.create(item).

Check the Backbone Collection.create() doc

Upvotes: 4

Related Questions