2013-07-09 26 views
2

我试图重写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); 
    }, 

    ... 

}); 

回答

3

这里就是终于为我们工作:

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); 
} 
+0

jQuery的哪个版本是你使用?我试过这个方法,但settings.xhr函数甚至没有触发。它被定义。 – Adam