2013-07-09 24 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