Javascript 使用Backbone.js将表单输入序列化为JSON

Javascript 使用Backbone.js将表单输入序列化为JSON,javascript,jquery,json,backbone.js,serialization,Javascript,Jquery,Json,Backbone.js,Serialization,我正在开发RESTful应用程序——我在服务器端使用Java,在前端使用主干网。2将通过JSON进行通信 我的应用程序有很多表单,我想: 将表单输入序列化为JSON 将JSON发送到服务器 我的问题是: 将表单输入序列化为JSON的最佳方式是什么?也许是唯一的解决方案 一旦表单输入序列化为JavaScript对象,向服务器发送JSON的最佳方式是什么 到目前为止,我的代码是: Javascript和主干网 $(function(){ $.fn.serializeObject = func

我正在开发RESTful应用程序——我在服务器端使用Java,在前端使用主干网。2将通过JSON进行通信

我的应用程序有很多表单,我想:

  • 将表单输入序列化为JSON
  • 将JSON发送到服务器
  • 我的问题是:

  • 将表单输入序列化为JSON的最佳方式是什么?也许是唯一的解决方案
  • 一旦表单输入序列化为JavaScript对象,向服务器发送JSON的最佳方式是什么 到目前为止,我的代码是:

    Javascript和主干网

    $(function(){
        $.fn.serializeObject = function()
        {
            var o = {};
            var a = this.serializeArray();
            $.each(a, function() {
                if (o[this.name] !== undefined) {
                    if (!o[this.name].push) {
                        o[this.name] = [o[this.name]];
                    }
                    o[this.name].push(this.value || '');
                } else {
                    o[this.name] = this.value || '';
                }
            });
            return o;
        };
    
        //Model 
        var SignupForm = Backbone.Model.extend();
    
        //View
        var SignupView = Backbone.View.extend({
            el: '.signupForm',
            events: {
                'click input.submit': 'getStatus'
            },
            getStatus: function(event){
                var data = JSON.stringify($('form').serializeObject());
                $('.test').html(data);
                return false;
            }
        });
    
        var signupForm = new SignupForm();
        var signupView = new SignupView({
            model: signupForm
        });
    });
    
    HTML

    <div class="signupForm">
        <form class"signup">
            <label for="name" >Name:</label>
            <input type="text" id="name" name="name" />
    
            <label for="surname" >Surname:</label>
            <input type="text" id="surname" name="surname" />
    
            <input type="submit" value="submit" class="submit" />
        </form>
    
        <div class="test"></div>
    </div>
    
    
    姓名:
    姓:
    
    我是个新手,如果这是小事,我很抱歉

    我渴望以最好的方式编写我的应用程序,所以请随时告诉我是否有更好的方法来实现这一点


    非常感谢。

    主干网不会对您如何实现行为做出任何假设。它只提供了一个干净的体系结构模式。因此,您实现表单序列化的方式似乎很好(类似于或改编自:)

    就持久性而言,您可以在单击submit按钮时设置模型的属性

    在你看来:

    getStatus: function(event){
                var data = JSON.stringify($('form').serializeObject());
                this.model.set(data);
    
     }
    
    在您的模型中:

    initialize: function(){
       //This will save attributes every time a change event is triggered.
       this.bind("change", this.save);
    }
    
    将表单输入序列化为JSON的最佳方式是什么?也许是 主干网唯一解决方案

    用于将表单数据读入模型

    例如:

    var User = Backbone.Model.extend({
        schema: {
            title:      { type: 'Select', options: ['Mr', 'Mrs', 'Ms'] },
            name:       'Text',
            email:      { validators: ['required', 'email'] },
            birthday:   'Date',
            password:   'Password',
            address:    { type: 'NestedModel', model: Address },
            notes:      { type: 'List', listType: 'Text' }
        }
    });
    
    var user = new User();
    
    var form = new Backbone.Form({
        model: user
    }).render();
    
    $('body').append(form.el);
    
    一旦表单输入序列化为JavaScript对象,那么 将JSON发送到服务器的最佳方式


    之后,您可以将模型与REST服务同步。您必须在模型上设置url属性,并调用save方法。

    对于仅序列化为JSON,也有此选项


    另一个解决方案是使用扩展,它允许您以实体创建表单的相同方式提交表单:

    Backbone.View.extend({
      events: {
        "submit form": "formSubmitted"
      },
    
      formSubmitted: function(e){
        e.preventDefault();
    
        var data = Backbone.Syphon.serialize(this);
        this.model.set(data);
    
        this.model.save();
      }
    });
    

    您可以使用
    this.model.save(数据),而不是绑定到模型上的“change”事件
    而不是
    此.model.set(数据)。谢谢你的回答,这正是我想要的——倾听Rails关于表单命名的约定,很容易集成到任何后端解决方案中。非常有用的插件。。。谢谢你,囚犯