添加Javascript数组以形成输入

时间:2015-06-04 19:20:47

标签: javascript jquery vue.js

我正在构建一个群组邮件系统,其中VueJS和jQuery用于前端,Laravel 5用于后端。

我正在使用AJAX调用来检索基于组,代理商或所有活动用户的用户列表。然后,用户可以根据DOM中的这些结果删除地址(VueJS data)并手动添加新地址。

表单包含一个文件,所以我不能(或根本不想根据兼容性问题)使用AJAX调用发送表单数据。问题是我需要在用户提交时发送电子邮件地址列表以及表单。

这是Javascript。最相关的部分是serializeRecipients方法,我将每个电子邮件地址附加到隐藏的表单字段:

var vm = new Vue({
    el: '#emailContainer',
    data: {
        recipients: [
            {
               name: "Joe Smith",
               email: "joe@demo.com"
            }
        ],
        individualRecipients: [],
        manualRecipient: null,
        validation: {
            email: true
        }
    },

    methods: {
        //
        serializeRecipients: function() {
            var recipientAddresses = [];
            var individualRecipientAddresses = [];
            $.each(this.recipients, function (k, recipient) {
                recipientAddresses.push(recipient['email']);
            });
            $.each(this.individualRecipients, function(k, recipient) {
                individualRecipientAddresses.push(recipient);
            });

            $("#recipientsInput").val(recipientAddresses);
            $("#individualRecipientsInput").val(individualRecipientAddresses);
        }
    }
});

在表单元素上,我使用v-on="submit: serializeRecipients"。这将生成此表单输出:someone@demo.com, someoneelse@demo.com,然后我使用PHP的explode()函数将其转换为数组。

这一切都有效,但我想知道是否有更好的方法来实现这一目标。任何建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以将数组加入字符串,然后在服务器上解析它。

scope.$watch('node.checked', function (newValue, oldValue) {

所以:

$("#recipientsInput").val(recipientAddresses.join(','));
$("#individualRecipientsInput").val(individualRecipientAddresses.join(','));

会变成:

['me@somewhere.com', 'you@somewhereelse.com', 'him@somewhere.com']

然后在服务器上,您可以用逗号分割该字段。