从 extjs 网格中获取选定记录的正确方法
proper method to get selected record from extjs grid
我需要从 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。
为网格设置一个 itemId
并在你的 window 上使用 getComponent
得到你的网格:
this.items = [
{
itemId: 'myGrid', // add this line
xtype: 'grid',
...
然后在你的“editMeasures”函数中这样做:
editMeasuries: function()
{
var myWindow = this.getMeasuries();
var myGrid = myWindow.getComponent('myGrid');
...
您可能想使用 references
而不是 itemId
,这是处理 viewController.
中项目的更快方法
(我正在从@Peter Koltai 获取代码)
this.items = [{
reference: 'myGrid', // add this line
xtype: 'grid',
...
然后在你的“editMeasures”函数中这样做(你不需要 myWindow,它只是用来演示不同的方法):
editMeasuries: function()
{
let myWindow = this.getView(),
myGrid = this.lookup('myGrid');
...
我需要从 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。
为网格设置一个 itemId
并在你的 window 上使用 getComponent
得到你的网格:
this.items = [
{
itemId: 'myGrid', // add this line
xtype: 'grid',
...
然后在你的“editMeasures”函数中这样做:
editMeasuries: function()
{
var myWindow = this.getMeasuries();
var myGrid = myWindow.getComponent('myGrid');
...
您可能想使用 references
而不是 itemId
,这是处理 viewController.
(我正在从@Peter Koltai 获取代码)
this.items = [{
reference: 'myGrid', // add this line
xtype: 'grid',
...
然后在你的“editMeasures”函数中这样做(你不需要 myWindow,它只是用来演示不同的方法):
editMeasuries: function()
{
let myWindow = this.getView(),
myGrid = this.lookup('myGrid');
...