2013-07-08 16 views

回答

6

簡短的答案是否定的。長的答案是,排序

這並不真的有什麼關係Backbone,反而是對能夠AJAX在瀏覽器中的文件。解決方案是使用HTML 5中的File API。下面是如何使用Backbone模型。

我們假設我們有一個用戶模型,並且我們想要在該模型上保存一個頭像文件。

// Backbone Model JS 

User = Backbone.Model.extend({ 
    readAvatar : function (file, callback) { 
    var reader = new FileReader(); // File API object for reading a file locally 
    reader.onload = (function (theFile, self) { 
     return function (e) { 
     // Set the file data correctly on the Backbone model 
     self.set({avatar_file_name : theFile.name, avatar_data : fileEvent.target.result}); 
     // Handle anything else you want to do after parsing the file and setting up the model. 
     callback(); 
    }; 
    })(file, this); 
    reader.readAsDataURL(file); // Reads file into memory Base64 encoded 
    } 
}); 

// Somewhere in your view JS 

this.$("input[type='file']").change(function (event) { 
    var file = e.originalEvent.target.files[0]; 
    userModel.readAvatar(file, userModel.save); 
}); 

// HTML 
<form><input type="file" name="avatar"/></form> 

現在在您的後端,您需要處理以Base64編碼數據形式出現的文件。

一對夫婦的警告:

  1. 如果你需要廣泛的瀏覽器支持,那麼這個解決可能不會爲你工作。

  2. 編碼文件的Base64將增加通過線路發送的數據量約30%。

+0

我有類似的情況下創建文件上傳的屬性。我已經在這裏發佈我的問題http://stackoverflow.com/questions/20805043/backbonejs-save-files-and-form-data。我想知道我需要在這裏更改'avatar_file_name'和'avatar_data到我的文件名'ImageData' –