Как удалить метку после удаления компонента? - PullRequest
0 голосов
/ 22 февраля 2011

При удалении поля из набора полей его метка не удаляется. Как я могу удалить это? Я использую ExtJS 2.0.2. Код следует:

var predicateArguments= new Ext.form.FieldSet({
    id:'predicate_arguments',
    layout:'form',
    title:'Predicate Arguments',
    defaultType:'textfield',
    autoHeight:true,
    autoWidth:true,
    autoScroll:true,
    items:[
        {
            xtype:'textarea',
            id:'description',
            fieldLabel:'Description',
            name:'description',
            readOnly:true
        }
    ],
    buttons: [
        {text: 'Add',
         handler:function(){
            //this will submit  the form's fields
            predicatesForm.getForm().submit();
         }},
        {text: 'Reset Fields',
         handler:function(){
            //this will reset the form's fields
            predicatesForm.getForm().reset();
         }}
        ]
})

var predicatesForm = new Ext.FormPanel({
    id:'predicates-form',
    region:'center',
    split:true,
    labelAlign:'right',
    layout:'column',
    items:[availablePredicatesGrid, predicateArguments]
})

var dateField = {xtype:'datefield',
                fieldLabel:'Date',
                name:'date',
                id:'date_field'
}

var numberField = {xtype:'numberfield',
            fieldLabel:'Number',
            name:'number',
            id:'number_field'
}

//when a rule is clicked do the following...
    availablePredicatesGrid.getSelectionModel().on('rowselect', function(sm,_rowIndex,_rule){
        predicatesForm.getForm().loadRecord(_rule);
        var _ruleType= _rule.store.getAt(_rowIndex).get('type');

        //removes previous existing fields (but not labels!)
        predicateArguments.remove('date_field');
        predicateArguments.remove('number_field');

        //creates new fields according to the selected rule types
        for(i=0; i<_ruleType.length; i++){
            if(_ruleType[i]=='date'){
                predicateArguments.add(dateField);
                predicateArguments.doLayout();
            }
            else if(_ruleType[i]=='number'){
                predicateArguments.add(numberField);
                predicateArguments.doLayout();
            }
        }
    });

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

Вместо вызова remove для вашей ссылки Ext.Element, сделайте это вместо:

Ext.getCmp('id_of_your_form_field').getEl().parent().parent().remove();

EDIT: это предназначено для использования в компонентах поля формы, так как удаляет div-оболочку, содержащую метку икомпонент

0 голосов
/ 22 февраля 2011

Я не знаю extjs, но, как правило, как бы вы сделали это (и как вы должны это сделать), просто добавив вход и его метку в a или затем, когда вы хотите удалить вход ( и его ярлык одновременно), просто сделайте:

obj = document.getElementById( ID-OF-ELEMENT )
obj.parentNode.html = '';

или просто удалите его родителя любым другим способом, который, как вам может показаться, не будет иметь пустых пролетов:

obj.parentNode.parentNode.removeChild( obj.parentNode );

или, если вы знаете, что метка находится перед входом, вы можете просто сделать:

obj.parentNode.removeChild( obj.previousSibling );

или просто комбинируйте их в соответствии с вашими целями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...