sync
विधि को ओवरराइड करके एक समाधान है, जिसका उपयोग मैं फ़ाइल अपलोड की अनुमति देने के लिए करता हूं।
इस मामले में मैं मॉडल की sync
विधि को ओवरराइड करता हूं, लेकिन यह Backbone.sync
विधि भी हो सकता है।
var FileModel = Backbone.Model.extend({
urlRoot: CMS_ADMIN_URL + '/config/files',
sync: function(method, model, options){
// Post data as FormData object on create to allow file upload
if(method == 'create'){
var formData = new FormData();
// Loop over model attributes and append to formData
_.each(model.attributes, function(value, key){
formData.append(key, value);
});
// Set processData and contentType to false so data is sent as FormData
_.defaults(options || (options = {}), {
data: formData,
processData: false,
contentType: false
});
}
return Backbone.sync.call(this, method, model, options);
}
});
संपादित करें:
अपलोड प्रगति पर नज़र रखने के लिए, आप एक xhr
विकल्प के विकल्प के लिए जोड़ सकते हैं:
...
_.defaults(options || (options = {}), {
data: formData,
processData: false,
contentType: false
xhr: function(){
// get the native XmlHttpRequest object
var xhr = $.ajaxSettings.xhr();
// set the onprogress event handler
xhr.upload.onprogress = function(event) {
if (event.lengthComputable) {
console.log('%d%', (event.loaded/event.total) * 100);
// Trigger progress event on model for view updates
model.trigger('progress', (event.loaded/event.total) * 100);
}
};
// set the onload event handler
xhr.upload.onload = function(){
console.log('complete');
model.trigger('progress', 100);
};
// return the customized object
return xhr;
}
});
...
स्रोत
2014-01-17 17:51:07
आप ओवरराइड कर सकते हैं [ 'sync'] (http://backbonejs.org/#Sync) विश्व स्तर पर, प्रति-मॉडल, या प्रति-संग्रह सर्वर से किसी भी तरह से आप चाहते हैं बात करने के लिए। –
अरे, आपका सुझाव वह दृष्टिकोण था जिसके साथ मैं गया था। इसे उत्तर के रूप में सबमिट करने के लिए स्वतंत्र महसूस करें और मैं इसे स्वीकार करूंगा। – Leonidas