How to override Backbone.sync?
backbone.js, javascript
Solution
Take a look at this annotated source example where they overwrite `Backbone.sync` with a localstorage alternative
backbone-localStorage
Basically Backbone.sync should be a function that takes 4 arguments:
Backbone.sync = function(method, model, options) { };
You need to fire either `options.success` or `options.error` depending on whether the `method` succeeded. The methods are in the format:
- `"create"` : expected that you create the model on the server
- `"read"` : expected that you read this model from the server and return it
- `"update"` : expected that you update the model on the server with the argument
- `"delete"` : expected that you delete the model from the server.
You need to implement those 4 methods and define whatever you want for your `"server"`
Of course these are only the things that `Backbone.sync` must implement. You may implement more `methods` and you may pass more paramaters back to `success` but it's best not to do this.
It's best to make sure it does the same as `Backbone.sync` does currently so that your programming to an interface rather then an implementation. If you want to switch out your modified `Backbone.sync` for say the localStorage one you won't have to extend it yourself to match your extended Backbone.sync"
[Edit]
Also do note that you can use multiple implementations of `sync`. Every reference to `Backbone.sync` is actaully `(this.sync || Backbone.sync)` so you just have to do something like:
var MyModel = Backbone.Model.extend({
...
"sync": myOwnSpecificSync,
...
});
`Backbone.sync` is just the default global one that all models use unless the models have a `sync` method specifically set.
Problem
I'm trying out Backbone.js, and one of the things I'm trying is to make a call to a remote API, so I need to be able to override Backbone.sync, as I understand the documentation. There isn't an example of how to do that in the documentation itself, and there doesn't appear to be a google group for Backbone... can someone point out an example for doing this?