extend Backbone.sync to batch sync?

2019-04-23 08:08发布

What technique shall one use to implement batch insert/update for Backbone.sync?

标签: backbone.js
2条回答
Emotional °昔
2楼-- · 2019-04-23 08:39

Here's how I did it

Backbone.originalSync = Backbone.sync;

Backbone.sync = function (method, model, options) {
    //
    // code to extend sync
    //

    // calling original sync 
    Backbone.originalSync(method, model, options);
}

works fine for me , and I use it to control every ajax request coming out of any model or collection

查看更多
混吃等死
3楼-- · 2019-04-23 08:43

I guess it depends on your usage scenarios, and how much you want to change the calling code. I think you have two options:

Option 1: No Change to client (calling) code

Oddly enough the annotated source for Backbone.sync gives 'batching' as a possible reason for overriding the sync method:

Use setTimeout to batch rapid-fire updates into a single request.

Instead of actually saving on sync, add the request to a queue, and only batch-save every so often. _.throttle or _.delay might help you here.

Option 2: Change client code

Alternatively, instead of calling save on your models, you could add some sort of save method to collections. You'd have to track which models were actually modified and hence in need of update, since as far as I can tell, Backbone only knows whether they're new or not (but I could be wrong about that).

查看更多
登录 后发表回答