Checkboxgroup在第二次调用时获得重复值

时间:2016-02-10 09:45:47

标签: extjs

我也在其他字段的窗口上显示checkboxgroup。 但是第二次调用函数显示带有复选框组的窗口时,复选框组会重复。

即它只显示两次而不是多次。

例如:如果实际的复选框值为"红色" ,"绿色"那么第二次,第三次通话的结果将是"红色" ,"红色" ,"绿色" ,"绿色"。

即使是+ Checklist按钮,在第二次或更多次通话时也会显示两次。

虽然在第一次通话时显示正确的值。

下面是我正在处理的代码。

 var checkboxconfigs = [];
          function showassetForm(record,statusname,emptyval) 
            {
            var arrSubTicket = getSubTickets(record.data.Id);

        for(z=0;z<arrSubTicket.length;z++)
           {
                checkboxconfigs.push({ //pushing into array
               id:arrSubTicket[z].Id,
               boxLabel:arrSubTicket[z].Name,
               name:'checklist',
               inputValue:arrSubTicket[z].Id,
               relatedTicket:arrSubTicket[z].TicketId
        //any other checkbox properties, layout related or whatever
        });
           }


        var  myCheckboxGroup = Ext.create('Ext.form.CheckboxGroup', {
            columns: 1,
            vertical: true,
            items: checkboxconfigs
        });
         myCheckboxGroup.on({              
            change: function(checkboxGroup, newValue) {
                 formattedValues = [];

                newValue = newValue.checklist.length === 0 ? [newValue.checklist] : newValue.checklist;
                checkboxGroup.items.each(function(checkbox){
                    var checkboxValue = checkbox.inputValue,
                        foramttedValue = {};

                    foramttedValue[checkboxValue] = newValue.indexOf(checkboxValue) !== -1 ? 'on' : 'off';

                    formattedValues.push(foramttedValue);
                });
            }

        });



             form = Ext.widget('form', {
                layout: {
                    type: 'vbox',
                    align: 'stretch'
                },
                border: false,
                bodyPadding: 10,

                fieldDefaults: {
                    labelAlign: 'top',
                    labelWidth: 100,
                    labelStyle: 'font-weight:bold'
                },
                defaults: {
                    margins: '0 0 10 0'
                },



                items: [{
                    xtype: 'fieldcontainer',
                    labelStyle: 'font-weight:bold;padding:0',
                    layout: 'vbox',
                    defaultType: 'textfield',

                    fieldDefaults: {
                        labelAlign: 'left'
                    },

                    items: [
                    /*{
                        flex: 1,
                        name: 'Name',
                        fieldLabel: 'Ticket Description',
                        allowBlank: true
                    },*/ 
                    {

                        name: 'Hours',
                        fieldLabel: 'Hours',
                        allowBlank: true,
                        value: record.data.Hours
                    }, 

                    {    
                         flex: 2, 
                        xtype:'textarea',
                        name: 'Notes',
                        fieldLabel: 'Ticket Notes',
                        allowBlank: true
                    }, 
                    {
                        xtype: 'combo',
                        fieldLabel: 'Status',
                        hiddenName: 'Status',
                        allowBlank: false,
                        name:'Status',
                        store: new Ext.data.SimpleStore({
                            data: allstatus,
                            id: 0,
                            fields: ['value', 'text']
                        }),
                       // valueField: 'value',
                        valueField: 'value',
                        displayField: 'text',
                        triggerAction: 'all',
                        editable: false,
                       // value : record.data.Status
                        value : statusname
                    },
                    {
                        xtype: 'combo',
                        fieldLabel: 'Priority',
                        hiddenName: 'Priority',
                        allowBlank: false,
                        name:'Priority',
                        store: new Ext.data.SimpleStore({
                            data: priorities,
                            id: 0,
                            fields: ['value', 'text']
                        }),
                       // valueField: 'value',
                        valueField: 'value',
                        displayField: 'text',
                        triggerAction: 'all',
                        editable: false,
                        value : record.data.Priority
                    },

                    {
                        xtype: 'button',
                        id: 'newSubTicket',
                        cls:'x-btn-default-small',
                        text: '+ Checklist',
                        handler : function () {
                            createSubticket(record,statusname);
                        },
                        style : 'margin:0 0px'
                    },

                    myCheckboxGroup

                    ]
                }],

                buttons: [{
                    text: 'Cancel',

                    handler: function() {                        
                        this.up('form').getForm().reset();
                        this.up('window').hide();
                    }
                }, {
                    text: 'Save',
                    handler: function() {
                           if (this.up('form').getForm().isValid()) 
                           {
                            // In a real application, this would submit the form to the configured url
                            // this.up('form').getForm().submit();
                           form =  this.up('form').getForm();
                           var recordsToAdd = [],recordsToAddNotes = [];
                           var record1 = {},recordNotes = {};
                            //this.up('window').hide();
                            //var summary = form.findField('Name').getSubmitValue();
                            var hrs = form.findField('Hours').getSubmitValue();
                            var status = form.findField('Status').getSubmitValue();
                            var priority = form.findField('Priority').getSubmitValue();
                            var notes = form.findField('Notes').getSubmitValue();
                            record1['ccfive_related_ticket_status']=status;
                            record1['dev_priority']=priority;
                            record1['io_uuid'] = record.data.Id;
                            //console.log("TicketName="+record.data.TicketName);
                            recordsToAdd.push(record1);

                            recordNotes['dev_note'] = notes;
                            recordNotes['dev_hours'] = hrs;
                            recordNotes['dev_related_punchlist_item'] = record.data.Id;
                            recordNotes['ccfive_related_ticket_status'] = status;
                            recordsToAddNotes.push(recordNotes);

                        }
                    }
                }]
            });

            win = Ext.widget('window', {
                title: record.data.TicketName,
                closeAction: 'hide',
                width: 400,
                height: 450,
                minHeight: 220,
                layout: 'fit',
                resizable: true,
                modal: true,
                items: form
            });
            win.show();

 }

This is what I get on first call

但点击取消并调用该功能后,它会显示我。

Duplicate checkboxes and checklist button on second call

3 个答案:

答案 0 :(得分:0)

Move var checkboxconfigs = [];进入showassetForm函数

function showassetForm(record, statusname, emptyval) {
var checkboxconfigs = [];
var arrSubTicket = getSubTickets(record.data.Id);

答案 1 :(得分:0)

问题只是将id传递给表单上的某些参数。 如果Id被传递,Extjs有时会表现得很奇怪。 删除了id参数,它工作正常!

答案 2 :(得分:0)

尝试并避免重复的ID(请参阅注释“double check this”):

for(z=0;z<arrSubTicket.length;z++)
{
  checkboxconfigs.push({
  id:arrSubTicket[z].Id,  // <==================== double check this!!
  boxLabel:arrSubTicket[z].Name,
  name:'checklist',
  inputValue:arrSubTicket[z].Id,  // <============ double check this!!
  relatedTicket:arrSubTicket[z].TicketId
});