【问题标题】:Preselect items in EXT JS 4.2 GridEXT JS 4.2 Grid 中的预选项目
【发布时间】:2013-08-19 21:20:34
【问题描述】:

我正在尝试根据数据存储中一项的值预选我的 EXT 网格中的项。

在我的数据存储中,我获取了 7 个项目,我抓取的最后一个“已安装”项目是 BOOLEAN,我想用它来预选网格中的项目。

这是我目前无法使用的代码...

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));
        }}
});

我试图在商店填充后使用 on.load 方法返回并预选我的项目,但没有任何运气。

我是一个 Python 人,不太喜欢 JS,所以对于菜鸟感到抱歉。

任何帮助将不胜感激。

再次感谢!

【问题讨论】:

    标签: extjs extjs4.2 extjs-grid


    【解决方案1】:

    您应该能够执行以下操作:

    //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 可以采用记录数组。
    http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.selection.Model-method-select

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

    不起作用,因为商店没有对选择模型的引用,反之亦然。您可以通过执行 grid.getSelectionModel() 或从网格中获取选择模型 您可以只使用您创建的 selModel 实例

    var selModel = Ext.create('Ext.selection.CheckboxModel', {
    

    【讨论】:

    • 效果很好,非常感谢您采取了额外的步骤并解释了我哪里出错了。
    猜你喜欢
    • 2023-03-04
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多