从extjs网格中获取选定记录的正确方法

dbf7pr2w  于 2022-11-04  发布在  其他
关注(0)|答案(2)|浏览(148)

我需要从extjs网格中获取选定的记录,但

Uncaught TypeError: grid.getSelectionModel is not a function

我看到了这个景色

Ext.define( 'App.view.Measuries', {
extend: 'Ext.window.Window',
alias : 'widget.measuries',
title: 'Мероприятия',

autoShow: false,
modal: true,
resizable: true,

initComponent: function()
{
    this.items = [
            {

            xtype: 'grid',
            alias: 'measuries_grid',
            bodyPadding: 8,
            defaults: { width: 1000, labelAlign: 'top' },

            columns:[
                { header: 'п/п',             width: 60, dataIndex: 'm_number',     menuDisabled: true, sortable: false},
                { header: 'Мероприятие',             width: 340, dataIndex: 'm_text',     menuDisabled: true, sortable: false},
                { header: 'Плановая дата выполнения', width: 146, dataIndex: 'date_plan', menuDisabled: true, sortable: false, xtype: 'datecolumn', format:'d.m.Y', align: 'center'},
                { header: 'Фактическая дата выполнения', width: 146, dataIndex: 'date_done', menuDisabled: true, sortable: false, xtype: 'datecolumn', format:'d.m.Y', align: 'center'},
                { header: 'Выполнено', width: 95, dataIndex: 'isdone', menuDisabled: true, sortable: false, align: 'center',
                                                                                                                renderer: function ( v )
                                                                                                                {
                                                                                                                    return '<img src="img/' + v.toString().toLowerCase() + '.png">';
                                                                                                                }},
                { header: 'Отказ',             width: 95, dataIndex: 'faultid',     menuDisabled: true, sortable: false}, 
                    ],

            store : 'Measuries'

            }   
        ];

而这个控制器(也是它的一部分)

editMeasuries: function()
{
    var grid = this.getMeasuries();
    console.log(grid);
    var rec  = grid.getSelectionModel().getLastSelected();
    /*var sel = grid.getSelectionModel();
    var rec = sel.getLastSelected();*/
    if ( rec )
    {
        var view = Ext.widget( 'measuries-edit' );
        view.down( 'form' ).loadRecord( rec );
    }
},

“this.getMeasuries()”部分似乎有问题。我的“别名:“widget.measuries'" "转到”Ext.window.Window“,getSelecionModel()需要一个网格。我试图在”Ext.window.Window“中设置网格项的别名,但也出现了错误。我如何才能更改我的控制器部分以使事情正确?对可能的错误感到抱歉,我的英语很弱,所以作为extjs。

ttygqcqt

ttygqcqt1#

为网格设置一个itemId,并在窗口上使用getComponent来获取网格:

this.items = [
    {
        itemId: 'myGrid', // add this line
        xtype: 'grid',
...

然后在你的'editMeasures'函数中这样做:

editMeasuries: function()
{
    var myWindow = this.getMeasuries();
    var myGrid = myWindow.getComponent('myGrid');
...
vuv7lop3

vuv7lop32#

您可能不想使用itemId,而想使用references,这是在viewController中处理项目的更快方法。
(我从@Peter Koltai处获取代码)

this.items = [{
    reference: 'myGrid', // add this line
    xtype:     'grid',
    ...

然后在你的'editMeasures'函数中这样做(你不需要myWindow,它只是在那里演示一种不同的方法):

editMeasuries: function()
{
    let myWindow = this.getView(),
        myGrid   = this.lookup('myGrid');
    ...

相关问题