阿贾克斯队列骨干JS(Ajax queue Backbone js)

2019-06-23 09:27发布

我正在骨干JS on Rails的3.2.2 0.9.2,我有增加成本rows.A成本页面有3周的TextField:标题,描述和价格。

我节省了模糊每个成本。

model.save()获取与非常短的时间间隔多次调用。 一个哪些问题create(post)请求,那么一个update(put)后不久的要求有。 我遇到的问题是,PUT请求有时达到POST之前的服务器,结果被该模型被创建并持续两次(一式两份)。

为了节省模糊是请求的行为,所以我需要一种方法来排队的请求。 我读过一些关于脊柱JS,他们通过某种队列的解决这个问题。 我也期待中本 ,但似乎无法弄清楚这一点。

这感觉就像这应该是一个常见的问题,以“单页的应用程序”的工作,但无法找到任何关于它。

Answer 1:

你可以重写保存方法,并创建一个队列,一个延迟的对象 。 例如,

var MDef = Backbone.Model.extend({
    url: "/echo/json/?delay=3",

    initialize: function() {
        this.queue = $.Deferred();
        this.queue.resolve();
    },

    save: function(attrs,options) {
        var m = this; 
        console.log("set "+JSON.stringify(attrs));

        // this.queue = this.queue.pipe with jquery<1.8
        this.queue = this.queue.then(function() {
            console.log("request "+JSON.stringify(attrs));
            return Backbone.Model.prototype.save.call(m, attrs, options);
        });            
    }
});

var m = new MDef();
m.save({title: "a title"});
m.save({description: "a description"});
m.save({price: "a price"});

和小提琴: http://jsfiddle.net/nikoshr/8nEUm/



Answer 2:

用户debounce从underscore.js 。

创建并返回传递的功能,这将推迟执行,直到后,因为它被调用最后一次等待毫秒已经过去的一个新的版本去抖。

这样,它只会在最后发生火灾后一度blur事件。



文章来源: Ajax queue Backbone js