Tagfield选择e取消选择:如何添加和删除dinammicaly fieldcontainers以形成

时间:2017-03-16 15:28:01

标签: javascript forms extjs extjs5

我需要用大字体中的标记字段(多选)更改一个combox(单选)。

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

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

一种可能的解决方案是在随后的小提琴中举例说明。

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

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

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

FIDDLE:https://fiddle.sencha.com/#view/editor&fiddle/1s6e

1 个答案:

答案 0 :(得分:1)

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

        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()或其他任何操作。