0

私はextjs 3.4を使用しています追加フィールドセットにキーと値のペアを追加/削除するためにこのコードを追加しますが、うまく機能していませんフィールドを動的に追加しますが、このブラウザを削除すると無限ループエラーが発生し、しばらくするとフィールドにも次のエラー:

TypeError: this.dom is undefined ここに私のコードがあります:

// この js はテスト専用です

Ext.onReady(function(){

    Ext.QuickTips.init();
    function addressCounter(incr) {
        if (!this.no) {
            this.no = 0;
        } else {
            this.no = this.no + 1;
        };
    };
    var counter = new addressCounter();
    console.log(counter.no);
    var roomPanel = new Ext.form.FormPanel({
       renderTo:"sid",
        id: "roomFP",
        baseCls: 'x-plain',
        labelWidth: 120,
        defaultType: 'textfield',
        monitorValid:true,
        bodyStyle: ' padding: 15px; background-color: #ffffff' ,
        items:[
        {
            xtype: 'fieldset',
            title: 'Room Properties',
            collapsible: true,
            id:'roompropertiesId',
            items:[new Ext.Button({
                text:'Add Property',
                handler: function(item){
                    var fieldset  = Ext.getCmp('roompropertiesId');
                    if(fieldset.items.length >5){
                        Ext.MessageBox.alert('Add Property','only five fields has been added');
                        return;
                    } 
                    counter.no = counter.no + 1;
                    var a = fieldset.add({
                        xtype            : 'compositefield'
                        ,
                        id                : 'compositefieldId'+counter.no
                        ,
                        name                : 'name'+counter.no
                        ,
                        height            : 22
                        ,
                        autoDestroy    : true
                        ,
                        items            : [{
                            name        : 'key'+counter.no
                            ,
                            fieldLabel    : "Key",
                            id                : 'keyFieldId'+counter.no
                            ,
                            xtype        : 'textfield'
                            ,
                            width        : 50
                            ,
                            height        : 22
                            ,
                            allowBlank    : true
                        },{
                            name        : 'value'+counter.no
                            ,
                            xtype        : 'textfield',
                            id           : 'valueFieldId'+counter.no
                            ,
                            fieldLabel    : 'Value'
                            ,
                            width        : 50
                            ,
                            allowBlank    : true
                        },{
                            xtype    : 'displayfield',
                            id:'removeFieldId'+counter.no,
                            html    : '<div class="img-delete" onclick="removeFormFields(\''+counter.no+'\');"><a href="#">Remove</a></div>'
                            ,
                            height    : 16
                        }]
                    });
                    fieldset.doLayout();
                    removeFormFields = function(id) {
                        Ext.getCmp('compositefieldId'+id).destroy();
                    }
                }
            })]
        }
        ],
        listeners : {
            render : function(form){
            }
        },
       });


});
4

1 に答える 1

2

Ext JS のバグのようです。Containerthen の代わりにnormalを指定すると、正常にCompositeField動作します。サブフィールドは作成時に( ) にCompositeField追加されますが、削除されないことがわかりました。これにより、たとえば、バリデーションが破棄されたフィールドを参照し、エラーが発生します。IMO からに自由に切り替えることができます。BasicFormFormPanel.getFormCompositeFieldBasicFormCompositeFieldContainer

于 2013-10-15T11:18:00.790 に答える