2

我有这个模型:

var Contact = Backbone.Model.extend({
    defaults: function () {
        return {
            idc: ""
            name: ""
            email: "",
            phones: new Array()
        }
    },
    urlRoot: 'admin/contact'
});

此表格(下划线模板):

<form>
    <input type="hidden" value="{{ idc }}" />
    <p>
        <label>Name:</label>
        <input type="text" name="name" value="{{ name}}" />
    </p>
    <p>
        <label>Email:</label>
        <input type="text" name="email" value="{{ email }}" />
    </p>
    <p>
        <label>Phones:</label>
        <input type="text" name="phones[]" value="" />
        <input type="text" name="phones[]" value="" />
        <input type="text" name="phones[]" value="" />
    </p>
    <button class="cancel">Cancel</button><button class="save">Save</button>
</form>

当我点击保存时,此功能进入联系人视图:

        e.preventDefault();

        var formData = {},
            prev = this.model.previousAttributes();

        $(e.target).closest("form").find(":input").each(function () {
            var el = $(this);
            formData[el.attr("name")] = el.val();
        });

        this.model.set(formData);
        this.model.save();
        this.render();

我希望在调用该函数时,它会创建一个数组以发送带有 的 PHP 文件phones,因此我可以将其存储在数据库中。但是查看浏览器控制台,属性数组的值是:[]

我是否缺少将其传递给 PHP 文件的内容?

PS:该数组在 formData 数组中,但是当我调用时,this.model.save()它看起来像丢失了数组。

无论如何,谢谢!

4

1 回答 1

1

您的问题基本上是您使用的是 jQuery 的serializeArray. serializeArray如果您想为每个表单元素创建模型,那就太好了,因为它会生成这样的 JSON(示例 JSON 取自 jQuery 文档):

[ 
    {name: 'firstname', value: 'Hello'}, 
    {name: 'lastname', value: 'World'},
    {name: 'alias'}, // this one was empty
]

但是,您不希望这样,您想从组合元素创建单个模型;换句话说,你想要:

{
    firstname: 'Hello',
    lastname: 'World',
    alias: undefined
}

如果您愿意,有 jQuery 插件可以产生类似的输出,但我个人建议您自己编写。如果您有一个带有 onSubmit 处理程序的表单视图,您可以执行以下操作:

this.model.set('name', this.$('[name="name"]').val());
this.model.set('email', this.$('[name="email"]').val());
// etc.

这是专门为您的应用量身定制的,并以您想要的确切方式序列化数据。

于 2013-04-26T17:21:05.367 回答