【问题标题】:Overriding Backbone sync with a progress event listener使用进度事件侦听器覆盖主干同步
【发布时间】:2013-07-07 05:41:31
【问题描述】:

我正在尝试覆盖 Backbone sync 函数以监听 progress 事件。但是,xhr.upload 未定义,因此下面的代码不起作用。有什么想法吗?

var Model = Backbone.Model.extend({

  ...

  sync: function(method, model, options) {
    options.beforeSend = function(xhr) {
      xhr.upload.addEventListener("progress", function(event) {
        if (event.lengthComputable) {  
          var percentComplete = event.loaded/event.total;
          console.log(percentComplete);
        }
      }, false); 
    }
    return Backbone.sync(method, model, options);
  },

  ...

});

【问题讨论】:

    标签: javascript jquery events backbone.js


    【解决方案1】:

    以下是最终对我们有用的方法:

    sync: function(method, model, options) { 
      options.beforeSend = function(xhr, settings) {
        settings.xhr = function() {          
          var xhr = $.ajaxSettings.xhr();
          xhr.upload.addEventListener("progress", function (event) {
            Math.ceil(event.loaded/event.total*100);
          }, false);
          return xhr;
        }
      }
      return Backbone.sync(method, model, options);
    }
    

    【讨论】:

    • 您使用的是哪个版本的 jquery?我尝试了这种方法,但 settings.xhr 函数甚至没有触发。虽然它已经定义了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 2018-01-23
    相关资源
    最近更新 更多