Javascript Tagfield select e deselect:如何添加和删除要形成的Dinammaly fieldcontainers

Javascript Tagfield select e deselect:如何添加和删除要形成的Dinammaly fieldcontainers,javascript,forms,extjs,extjs5,Javascript,Forms,Extjs,Extjs5,我需要通过标记字段(multiselect)以大的形式更改combox(单选) 发出请求,以便每个标记字段项(车辆列表)可以与字段关联,以输入每个车辆的值 解决此问题的最佳解决方案是什么? 一个可能的解决办法是,它在下面的小提琴中得到了举例说明 每当用户选择标记字段项目时,带有两个文本字段的fieldecontainer将动态添加到fom中:第一个字段与所选标记字段项目具有相同的名称,第二个字段用于car值 我要解决的第一个问题是:当取消选择标记字段列表项时,删除相应的fieldcontaine

我需要通过标记字段(multiselect)以大的形式更改combox(单选)

发出请求,以便每个标记字段项(车辆列表)可以与字段关联,以输入每个车辆的值

解决此问题的最佳解决方案是什么?

一个可能的解决办法是,它在下面的小提琴中得到了举例说明

每当用户选择标记字段项目时,带有两个文本字段的fieldecontainer将动态添加到fom中:第一个字段与所选标记字段项目具有相同的名称,第二个字段用于car值

我要解决的第一个问题是:当取消选择标记字段列表项时,删除相应的fieldcontainer

第二个问题是收集每个fieldcontainer的值(汽车名称和各自的价格值),并将它们一起发送到服务器端


FIDDLE:

我只需在添加字段容器时将其分配给哈希或其他内容,然后根据需要将其隐藏

        beforeselect: function (combo, record, eOpts) {
            var valueTagItem = record.get('name', this);

            if (!Ext.isDefined(this.carFields)) {
                this.carFields = {};
            }

            if (!Ext.isDefined(this.carFields[valueTagItem])) {
                this.carFields[valueTagItem] = this.up('form').add({
                    xtype: 'fieldcontainer',
                    padding: '7 0 7 0',
                    defaults: {
                        hideLabel: true,
                    },
                    layout: {
                        type: 'hbox',
                        align: 'strech'
                    },

                    items: [{
                        xtype: 'textfield',
                        name: 'text',
                        value: valueTagItem,
                        editable: false,
                        padding: '0 3 5 0',
                        flex: 1
                    }, {
                        xtype: 'textfield',
                        name: 'value',
                        emptyText: 'car value',
                        submitEmptyText: false,
                        allowBlank: false,
                        minWidth: 100,
                        flex: 0.5
                    }]
                });
            }
            this.carFields[valueTagItem].show();
        },
        beforedeselect: function (combo, record, index, eOpts) {
            var valueTagItemdeselect = record.get('name', this);
            this.carFields[valueTagItemdeselect].hide();
        }

要将所有值发送到服务器,只需执行this.up('form').getForm().submit()或其他操作

谢谢,泽克。它运行良好(这是一个非常有趣的解决方案)。发送到服务器的问题是,我需要将每个fieldcontainer的值一起发送(汽车+该汽车的价格)。如果您使用递增索引或其他方式使字段名称唯一,则可以通过表单的常规提交功能来发送。因此,您的第一组文本字段是“text1”和“value1”,下一组是“text2”和“value2”,等等。或者您可以通过自定义AJAX请求提交,您可以使用form.getValues()并从中构建该请求的参数。