【问题标题】:get a row from a grid ExtJs 4从网格中获取一行 ExtJs 4
【发布时间】:2013-01-21 09:29:01
【问题描述】:

我觉得回答这个问题很简单:

我的自定义商店有简单的网格:

//other code
{
    xtype: 'grid',
    store: 'SecondStore',
    itemId: 'mainTabPanel2',
    columns: [
        //this is not from the store
        {
            header: 'Not Form Store',
            id: 'keyId2',
        },
        //from the store
        {
            header: 'From Store',
            dataIndex: 'label',
            id: 'keyId',
        }
    ]
}

商店仅使用 id:keyId 填充第二列。事实上它有:

fields: [{ name: 'label' }]

这很好用。

我想从函数中获取此网格的第 n°1 行。

handler: function() {
    var grid = Ext.ComponentQuery.query('grid[itemId="mainTabPanel2"]')[0];
    //var row= get row(1) <- i don't know how to get the complete row
}

我正在使用 ExtJs 4,所以我无法通过命令 grid.getView().getRow(1); 获取它

我无法从商店中获取它,因为我还想获取未存储在商店中的 id:keyId2 列的内容,因此我无法执行以下操作:

grid.getStore().getAt(1);

有人知道如何在 ExtJs 4 中获取完整的行吗? 谢谢!

【问题讨论】:

  • 你找到解决方案了吗?
  • 是的,检查我自己的答案

标签: javascript extjs datagrid extjs4


【解决方案1】:

您可以在这个 ExtJS 4.x 中使用 getNode:grid.getView().getNode(index) 解决问题

getNode 可以采用 HTML ID(不是很有用)、索引或存储记录。

【讨论】:

    【解决方案2】:

    我已经解决了访问 DOM:

       /* Get Dom of the first grid */
       var DOMgrid = Ext.select('#'+gridview.getId());
       var gridChild = DOMgrid.elements[0].children[1].children[0].children;
    

    那么你应该得到你感兴趣的“孩子”来简单地遵循 DOM 结构。

    您还可以应用Ext.fly() 命令获取单例享元元素,并使用update() 命令更新内容:

     Ext.fly(/*DOM object here*/).update(/*raw content here*/)
    

    【讨论】:

      【解决方案3】:

      获取 FireBug 插件并在 'handler' 处监控网格。如果您看到来自 keyId2 列的数据,那么您也可以在萤火虫中看到方式。即网格对象->存储对象->数据数组。

      您能告诉我们您是如何在网格的 keyId2 列中添加数据的吗?

      【讨论】:

        【解决方案4】:

        我认为你需要这样的东西:

        Ext.onReady(function () {
            var store = Ext.create('Ext.data.Store', {
                storeId: 'simpsonsStore',
                fields: ['name', 'email', 'phone'],
                data: {
                    'items': [{
                        'name': 'Lisa',
                        "email": "lisa@simpsons.com",
                        "phone": "555-111-1224"
                    }, {
                        'name': 'Bart',
                        "email": "bart@simpsons.com",
                        "phone": "555-222-1234"
                    }, {
                        'name': 'Homer',
                        "email": "home@simpsons.com",
                        "phone": "555-222-1244"
                    }, {
                        'name': 'Marge',
                        "email": "marge@simpsons.com",
                        "phone": "555-222-1254"
                    }]
                },
                proxy: {
                    type: 'memory',
                    reader: {
                        type: 'json',
                        root: 'items'
                    }
                }
            });
        
            var grid = Ext.create('Ext.grid.Panel', {
                title: 'Simpsons',
                store: Ext.data.StoreManager.lookup('simpsonsStore'),
                columns: [{
                    text: 'Name',
                    dataIndex: 'name'
                }, {
                    text: 'Email',
                    dataIndex: 'email',
                    flex: 1
                }, {
                    text: 'Phone',
                    dataIndex: 'phone'
                }],
                height: 200,
                width: 400,
                renderTo: Ext.getBody()
            });
        
            alert(grid.getStore().getAt(1).data.name);
        
        });
        

        jsFiddle:http://jsfiddle.net/RftWF/

        【讨论】:

        • 我的商店中没有“keyId2”(您的示例中的字段“名称”),我无法将其添加到商店中。所以我不做 grid.getStore().getAt(1).data.name 因为我没有任何“data.name”定义。
        猜你喜欢
        • 1970-01-01
        • 2011-09-07
        • 2012-01-21
        • 1970-01-01
        • 1970-01-01
        • 2011-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多