多部分的形式保存在backbonejs属性 [英] multipart form save as attributes in backbonejs

查看:184
本文介绍了多部分的形式保存在backbonejs属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

任何机构可以给予例如,通过使用JS骨干模型保存多部分的形式?

如何将表单数据与文件中的数据结合起来并保存到模型

我设置的模型的属性,以及如何包括在属性文件中的数据。我适应了code从网站上FORC骨干企业之一,以保存属性为一个文件。我不能将它与我的形式

 <表单的enctype =的multipart / form-data的>
  <输入类型=文件名称=的ImageData>
  <输入类型=文本名称=用户名>
< /表及GT;

示范

 用户= Backbone.Model.extend({
  readAvatar:功能(文件,回调){
    VAR读卡器=新的FileReader();局部读取文件//文件API对象
    reader.onload =(功能(theFile,个体经营){
      复位功能(E){
        //正确设置骨干模型的文件数据
        self.set({avatar_file_name:theFile.name,avatar_data:fileEvent.target.result});
        //处理其他任何你想要解析文件和设置模式后做。
        回电话();
     };
    })(文件,本);
    reader.readAsDataURL(文件); //读取文件到内存中的Base64 EN codeD
  }
    属性:功能(ATTR){
      返回Object.defineProperty(this.prototype,ATTR {
        得到:函数(){
          返回this.get(attr)使用;
        },
        设置:功能(值){
          VAR ATTRS;          的attrs = {};
          ATTRS [ATTR] =价值;
          返回this.set(ATTRS);
        }
      });
    };
});
   变种form_data = form.serializeArray();

查看

  this.model.data = form_data;
VAR profiledata;
如果(window.FormData){
        profiledata =新FORMDATA();
        的console.log(profiledata);
}如果(profiledata){
    jQuery.each($('#的ImageData')[0] .files,功能(我,文件){
        //reader.readAsDataURL(file);
        profiledata.append(的ImageData [],文件);    });
}
    this.model.ImageData = profiledata;    //并保存数据
    this.model.save


解决方案

而不是模型处理的FileReader 逻辑,我一直在管理,在视图。

检查了这一点:

 <表单的enctype =的multipart / form-data的>
  <输入类型=文件名称=的ImageData>
  <输入类型=文本名称=用户名>
  <按钮和GT;提交< /按钮>
< /表及GT;

查看:

  VAR FormView控件= Backbone.View.extend({
  事件:{
    提交表单:提交,
    改变输入[type = file]:恩codeFILE
  },  渲染:功能(){
    VAR内容= this.template();
    这$ el.html(内容);
    返回此;
  },  EN codeFILE:函数(事件){
    var文件= event.currentTarget.files [0];
    VAR读卡器=新的FileReader();
    reader.onload =功能(fileEvent){
      this.model.set({
        avatar_data:fileEvent.target.result //文件名是数据的一部分
      });
    } .bind(本)
    reader.onerror =功能(){
      的console.log(错误,论据)
    }
    reader.readAsDataURL(文件);
  },  提交:函数(事件){
    。事件preventDefault();
    this.model.set({用户名:$('输入[名称=用户名]')VAL()});
    this.model.save();
  }
});

Can any body give example to save the multipart form by using backbone js model?

How to combine the form data with file data and save to model

I am setting the model attributes and how to include the file data in the attributes. I adapted the code from one of the site to Forc Backbone to save an attribute as a file. I could not relate it to my form

<form enctype="multipart/form-data">
  <input type="file" name="ImageData">
  <input type="text" name="UserName">
</form>

Model

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
  }
    attribute : function(attr) {
      return Object.defineProperty(this.prototype, attr, {
        get: function() {
          return this.get(attr);
        },
        set: function(value) {
          var attrs;

          attrs = {};
          attrs[attr] = value;
          return this.set(attrs);
        }
      });
    };
});


   var form_data = form.serializeArray();

View

    this.model.data =  form_data;
var profiledata;        
if (window.FormData) {  
        profiledata = new FormData(); 
        console.log(profiledata);   
}

if (profiledata) {  
    jQuery.each($('#ImageData')[0].files, function(i, file) {
        //reader.readAsDataURL(file);  
        profiledata.append("ImageData[]", file);

    });     
}   
    this.model.ImageData = profiledata;

    //and save the data
    this.model.save

解决方案

Rather than handling the FileReader logic in the model, I've been managing that in the view.

Check this out:

<form enctype="multipart/form-data">
  <input type="file" name="ImageData">
  <input type="text" name="UserName">
  <button>Submit</button>
</form>

View:

var FormView = Backbone.View.extend({
  events: {
    "submit form" : "submit",
    "change input[type=file]" : "encodeFile"
  },

  render: function () {
    var content = this.template(); 
    this.$el.html(content);
    return this;
  },

  encodeFile: function (event) {
    var file = event.currentTarget.files[0];
    var reader = new FileReader();
    reader.onload = function (fileEvent) {
      this.model.set({ 
        avatar_data: fileEvent.target.result // file name is part of the data
      });
    }.bind(this)
    reader.onerror = function () {
      console.log("error", arguments)
    }
    reader.readAsDataURL(file);
  },

  submit: function (event) {
    event.preventDefault();
    this.model.set({ UserName: $('input[name=UserName]').val() });
    this.model.save();
  }
});

这篇关于多部分的形式保存在backbonejs属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆