3
是否有一種方式,將迫使骨幹到的數據發送到服務器的文件(如果你有<input type="file">
標籤提交表單使用Model.set
和Model.save
方式?強制骨幹力量屬性保存爲一個文件
是否有一種方式,將迫使骨幹到的數據發送到服務器的文件(如果你有<input type="file">
標籤提交表單使用Model.set
和Model.save
方式?強制骨幹力量屬性保存爲一個文件
簡短的答案是否定的。長的答案是,排序。
這並不真的有什麼關係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編碼數據形式出現的文件。
一對夫婦的警告:
如果你需要廣泛的瀏覽器支持,那麼這個解決可能不會爲你工作。
編碼文件的Base64將增加通過線路發送的數據量約30%。
我有類似的情況下創建文件上傳的屬性。我已經在這裏發佈我的問題http://stackoverflow.com/questions/20805043/backbonejs-save-files-and-form-data。我想知道我需要在這裏更改'avatar_file_name'和'avatar_data到我的文件名'ImageData' –