ExtJS Remove item of a store

davids182009 picture davids182009 · Jun 12, 2015 · Viewed 13.3k times · Source

In a extjs app I have a tree panel that reads an json file, in the tree panel i have a check box that execute an action, additionally I save the checked element in a grid panel of a tab panel...

I want to remove any element of the store saved previously with the checkchange event of the checkbox ...

I have this code

The view:

Ext.define('app.view.ViewTablaContenido', {
extend: 'Ext.window.Window',
id: 'viewTablaContenido',
shadow: false, 
alias: 'widget.tablaContenido',  

initComponent: function() {
    .......

    var tree = Ext.create('Ext.tree.Panel', {
        title: '',
        id: "arbolTabla", 
        width: anchoTOC,
        height: altoTOC,            
        reserveScrollbar: true,
        loadMask: true,
        useArrows: true,
        rootVisible: false,
        store: 'capa',
        allowDeselect : true,
        border : true,
        animate: true,
        columns: [{
            xtype: 'treecolumn',
            text: 'Capa',
            flex: 5,
            sortable: true,
            dataIndex: 'titulo'
        },{
            text: 'Metadato',
            flex: 2,
            dataIndex: 'metadato',
            renderer: addUrl
        }]
    });

    var storeV = Ext.getStore('visualizacion');

    var grid = Ext.create('Ext.grid.Panel', {
        viewConfig: {                     
            plugins: [
                      Ext.create('Ext.grid.plugin.DragDrop',{
                          dragText: 'Arrastre y suelte para reorganizar'}
                      )]
        },
        store: storeV,
        columns: [
                  {
                      text: 'Name',
                      width: '100%',
                      sortable: false,
                      hideable: false,
                      dataIndex: 'nombreCapa'
                  }
                  ]
    });

    var tabPanel = Ext.create('Ext.tab.Panel',{
        id: 'tabTabla',
        items: [{
            title: 'Listado de Capas',
            tooltip: 'Muestra las capas disponibles en el sistema',
            items:[tree]
        }, {
            title: 'Visualización de capas',
            tooltip: 'Muestra las capas prendidas y permite organizar su visualización',
            autoWidth : true,
            autoHeight : true,
            plain : true,
            defaults : {
                autoScroll : true,
                bodyPadding : 0
            },
            items: [{
                xtype : 'label',
                text : 'Para ordenar la visualización de las capas arrastre y suelte a la posición deseada.',
            },
            grid]
        }]
    });

    Ext.apply(this, {
        title: 'TABLA CONTENIDO',           
        constrain: true,
        header : {
            titlePosition : 2,
            titleAlign : 'center'
        },
        closable : false,
        width : anchoTOC,
        height : altoTOC,
        x : 20,
        y : 270,
        layout : 'fit',
        animCollapse : true,
        collapsible : true,
        collapseDirection : Ext.Component.DIRECTION_LEFT,
        items: [tabPanel],
    });

    this.callParent(arguments);
}
});

The controller:

Ext.define('app.controller.ControlTablaContenido', {
extend: 'Ext.app.Controller',
views : ['ViewTablaContenido'],
init: function() {
    this.control({
        '#viewTablaContenido button[action=apagarCapas]': { 
            click: this.apagarCapas  
        },
        '#viewTablaContenido':{
            render: this.renderizar,
            collapse: this.ocultarTabla
        },
        '#arbolTabla':{
            select: this.seleccionarElemento,
            checkchange: this.cambioElemento,
            beforedeselect: this.deseleccionElemento
        }
    });
},

apagarCapas : function(boton, e){
    //alert("BOTON PRESIONADO!!");
},
renderizar: function(ev,eOpts){
},
seleccionarElemento: function(record, index, eOpts){
    var idCapaAct = index.data.id;
    var controladorUbicar = aplicacion.getController("ControlUbicar");
    capaActiva =  controladorUbicar.buscarcapa(idCapaAct);
},
cambioElemento: function(node, checked, eOpts){

    var capaBuscar = node.data.id;
    var controladorUbicar = aplicacion.getController("ControlUbicar");
    var capa =  controladorUbicar.buscarcapa(capaBuscar);

    var nombreCapa = node.data.titulo;
    var idCapa = node.data.id;
    var storeV = Ext.getStore('visualizacion');
    console.log(storeV);

    if(checked != false){
        capa.setVisible(true);

        storeV.add ({
            nombreCapa: nombreCapa ,
            idCapa: idCapa,
        });
    }else{
        capa.setVisible(false);
        //store.load(); 
        //storeV.remove(storeV.findRecord(nombreCapa,idCapa));
        //storeV.sync();
        //storeV.remove(nombreCapa);
        //storeV.sync();
    }
    capaActiva = capaBuscar;
},
deseleccionElemento: function(record, index, eOpts ){
},
buscarCapa: function(){

},
ocultarTabla: function(p){

},
cambioSlider: function(slider, newValue, thumb, eOpts ){
},
renderizarSlider: function(slider, event, eOpts){
    slider.setVisible(false);
}
});

The model:

Ext.define('app.model.modeloVisualizacion', {
extend: 'Ext.data.Model',
id: 'modeloVisualizacion',
fields: [ 'nombreCapa', 'idCapa' ]
});

And the store (with sample data):

Ext.define('app.store.visualizacion', {
extend: 'Ext.data.Store',
requires: 'app.model.modeloVisualizacion',
model: 'app.model.modeloVisualizacion',
data:[
      { nombreCapa: 'Lisa', idCapa: '1' },
      { nombreCapa: 'Bart', idCapa: '2' },
      { nombreCapa: 'Homer', idCapa: '3' },
      { nombreCapa: 'Marge', idCapa: '4' }
      ]
});

Answer

Udith Chandrarathna picture Udith Chandrarathna · Oct 18, 2018

From store.find(fieldName,value) you can find the index of the first matching record in this store by a specific field value. If you want to remove a record based on a exact value please use this.

store.remove(store.findRecord('fieldName', 'value', 0, false, true, true));