Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ajax队列主干js_Ruby On Rails_Ajax_Backbone.js_Ruby On Rails 3.2 - Fatal编程技术网

Ruby on rails Ajax队列主干js

Ruby on rails Ajax队列主干js,ruby-on-rails,ajax,backbone.js,ruby-on-rails-3.2,Ruby On Rails,Ajax,Backbone.js,Ruby On Rails 3.2,我在Rails3.2.2上运行主干JS0.9.2,我有一个页面用于添加成本行。成本有3个文本字段:标题、描述和价格 我正在为blur节省每项成本 model.save()。它会发出一个create(post)请求,然后不久就会发出一个update(put)请求。我遇到的问题是,PUT请求有时会在POST之前到达服务器,结果是模型被创建并保持两次(重复) 保存模糊是请求的行为,因此我需要一种方法来排队请求。 我读过一些关于Spine js的文章,他们通过某种队列解决了这个问题。我也看过了,但似乎还

我在Rails3.2.2上运行主干JS0.9.2,我有一个页面用于添加成本行。成本有3个文本字段:标题、描述和价格

我正在为blur节省每项成本

model.save()。它会发出一个
create(post)
请求,然后不久就会发出一个
update(put)
请求。我遇到的问题是,PUT请求有时会在POST之前到达服务器,结果是模型被创建并保持两次(重复)

保存模糊是请求的行为,因此我需要一种方法来排队请求。 我读过一些关于Spine js的文章,他们通过某种队列解决了这个问题。我也看过了,但似乎还没弄明白


感觉这应该是一个常见的问题,使用“单页应用程序”,但找不到任何相关信息。

User
debounce
from

创建并返回传递函数的新取消公告版本,该版本将推迟其执行,直到自上次调用该函数以来已过等待毫秒


这样,它只会在最后一次模糊事件后触发一次。

您可以覆盖save方法并创建一个带有。比如说,

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"});
var MDef=Backbone.Model.extend({
url:“/echo/json/?delay=3”,
初始化:函数(){
this.queue=$.Deferred();
this.queue.resolve();
},
保存:功能(属性、选项){
var m=这个;
log(“set”+JSON.stringify(attrs));

//this.queue=this.queue.pipe with jquery这不是一个防弹的解决方案,它可以解决大多数情况,但仍然有可能丢失数据。@TimBrunsmo,@abraham
debounce
是正确的。数据将如何丢失?如果要强制定期保存,可以用
\uquot
替换它。@ggozad用户选择离开页面,例如单击“下一步”按钮,模糊事件可能不会发出请求。如果有队列,您可以检查队列是否已完成,然后让用户通过。@TimBrunsmo
throttle
debounce
都会产生您想要的效果。它们实际上会将函数排队等待以后执行。@TimBrunsmo除非您是财务主管不过你真的不需要任何多余的东西。一两秒钟的去盎司几乎永远不会在执行之前结束。