如何将extjs标记字段作为数组发布而不用引号

时间:2015-08-06 16:51:28

标签: javascript json extjs

我尝试使用extjs发布表单。我有需要作为json数组发送的标记字段。这是一个标记字段:

{
                    xtype: 'tagfield',
                    fieldLabel: 'Product(s)',
                    name: 'productIds',
                    store: {
                        type: 'products'
                    },
                    valueField: 'productId',
                    displayField: 'productName',
                    encodeSubmitValue: true //this is supposed to send an array per https://docs.sencha.com/extjs/6.0/6.0.0-classic/#!/api/Ext.form.field.Tag-cfg-encodeSubmitValue
                }

这是Ajax提交:

Ext.Ajax.request({
                        url: 'api/events/create',
                        method:'POST',
                        headers: { 'Content-Type': 'application/json' },
                        params : Ext.JSON.encode(form.getValues()),
                        success: function(form, action) {
                            Ext.Msg.alert('Success', action.result);
                        },
                        failure: function(form, action) {
                            //console.log(form.getForm().getValues());
                            Ext.Msg.alert('Submission failed.', 'Please make sure you selected an item for each required field.', action.result);
                        }
                    });

JSON有效负载最终看起来像这样:

{" productIds":" [1,2]" }

上述数组无法从字符串中反序列化(后端使用Jackson进行反序列化)。

有谁知道如何将上述内容发送为{ "productIds": [1,2] }

2 个答案:

答案 0 :(得分:4)

因此,当我删除complicated_process_with_many_methods时,它会自动将tagfield作为数组发送而不带引号。不管怎样,谢谢你的想法!

这里是没有encodeSubmitValue的标记字段:

encodeSubmitValue

答案 1 :(得分:0)

正如您通过执行Ext.JSON.encode({products: [1,2]});所看到的那样,encode函数未添加双引号。问题是Ext概念使每个表单字段与旧的HTML表单兼容,因此返回一个字符串。如果覆盖getValue()(或可能getRawValue())函数,则可以返回实际数组。