Вопрос

I am trying to preselect items in my EXT grid based on the value of one of the items in the data store.

In my data store I fetch 7 items, the last item I grab 'installed' is a BOOLEAN and I would like to use that to preselect items in my grid.

Here is the code I have so far that is not working...

Ext.require([
  'Ext.grid.*',
  'Ext.data.*',
  'Ext.selection.CheckboxModel'
]);

Ext.onReady(function(){
Ext.QuickTips.init();

var sb = $('#sb_id').val();

// Data store
var data =  Ext.create('Ext.data.JsonStore', {
    autoLoad: true,
    fields: [ 'name', 'market', 'expertise', 'id', 'isFull', 'isPrimary', 'installed'],
    proxy: {
        type: 'ajax',
        url: '/opsLibrary/getLibraryJsonEdit',
        extraParams: {
            sb_id: sb
        },
        actionMethods: 'POST'
    },
    sorters: [{
        property: 'market',
        direction: 'ASC'
    }, {
        property: 'expertise',
        direction: 'ASC'
    }]
});

data.on('load',function(records){
    Ext.each(records,function(record){

        var recs = [];
        Ext.each(record, function(item, index){

            console.log(item.data);
            if (item.data['installed'] == true) {
                console.log('Hi!');
                recs.push(index);
            }
        });
        //data.getSelectionModel().selectRows(recs);
    })
});

// Selection model
var selModel = Ext.create('Ext.selection.CheckboxModel', {
    columns: [
        {xtype : 'checkcolumn', text : 'Active', dataIndex : 'id'}
    ],
    listeners: {
        selectionchange: function(value, meta, record, row, rowIndex, colIndex){
            var selectedRecords = grid4.getSelectionModel().getSelection();
            var selectedParams = [];

            // Clear input and reset vars
            $('#selected-libraries').empty();
            var record = null;
            var isFull = null;
            var isPrimary = null;

            // Loop through selected records
            for(var i = 0, len = selectedRecords.length; i < len; i++){
                record = selectedRecords[i];

                // Is full library checked?
                isFull = record.get('isFull');

                // Is this primary library?
                isPrimary = record.get('isPrimary');

                // Build data object
                selectedParams.push({
                    id: record.getId(),
                    full: isFull,
                    primary: isPrimary
                });
            }
            // JSON encode object and set hidden input
            $('#selected-libraries').val(JSON.stringify(selectedParams));
        }}
});

I was trying to use an on.load method once the store was populated to go back and preselect my items but am not having any luck.

Im a Python guy and don't get around JS too much so sorry for the noobness.

Any help would be appreciated.

Thanks again!

Это было полезно?

Решение

You should be able to do something like:

//create selModel instance above
data.on('load', function(st, recs) {
    var installedRecords = Ext.Array.filter(recs, function(rec) {
        return rec.get('installed');
    });

    //selModel instance
    selModel.select(installedRecords);
});

Select can take an array of records.
http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.selection.Model-method-select

//data.getSelectionModel().selectRows(recs);

Didn't work because store's don't have a reference to selection models it is the other way around. You can get a selection model from a grid by doing grid.getSelectionModel() or you can just use the selModel instance you created

var selModel = Ext.create('Ext.selection.CheckboxModel', {
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top