ExtJs 模态面板控制器看不到我的网格
Posted
技术标签:
【中文标题】ExtJs 模态面板控制器看不到我的网格【英文标题】:ExtJs modal panel contoller doesn't see my grid 【发布时间】:2017-04-04 04:35:47 【问题描述】:我正在尝试构建 ExtJS 6 应用程序。 我有两个面板。
第一个(Panel3)包含两个网格并在“payordCmpGrid”网格调用的行项上展开事件 在控制器“main”中创建模态面板“askObjPanel”。
面板'panel3'
Ext.define('BillWebApp.view.main.Panel3',
extend: 'Ext.panel.Panel',
xtype: 'panel3',
title: 'title',
reference: 'panel3',
viewModel:
type: 'main'
,
controller: 'main',
items: [
xtype: 'gridpanel',
reference: 'payordGrpGrid',
width: 1200,
minHeight: 120,
margin: '0 0 10 0',
tbar: [
text: 'addGrp',
handler: 'onGridPayordGrpAdd'
],
...
xtype: 'gridpanel',
iconCls: 'framing-buttons-grid',
reference: 'payordCmpGrid',
width: 1000,
minHeight: 220,
header: false,
items: [
header: 'Object',
dataIndex: 'klskFk',
width: 200,
queryMode: 'local',
editor:
xtype: 'combo',
typeAhead: true,
forceSelection: true,
displayField: 'name',
valueField: 'id',
triggerAction: 'all',
allowBlank: false,
listeners:
expand: 'onGridPayordCmpItemSel'
,
...
面板'askObjPanel'
Ext.define('BillWebApp.view.main.AskObjPanel',
extend: 'Ext.form.Panel',
xtype: 'form-hboxlayout',
alias: 'widget.askobjpanel',
layout: 'form',
plain: true,
reference: 'askObjPanel',
controller: 'main',
items: [
xtype: 'fieldset',
defaultType: 'textfield',
layout: 'anchor',
items: [
xtype: 'fieldcontainer',
layout: 'hbox',
align: 'stretch',
combineErrors: true,
items: [
flex: 2,
xtype: 'button',
text: 'Найти',
listeners:
click: 'onAskObjButtonFindPress'
]
...
控制器“主”
var askObjPanel;
Ext.define('BillWebApp.view.main.MainController',
extend: 'Ext.app.ViewController',
alias: 'controller.main',
onGridPayordCmpItemSel: function()
// creating Panel 'askObjPanel'
askObjPanel = new Ext.form.Panel(
modal: true,
title: 'Find obj',
floating: true,
closable : true,
resizable : true,
layout: 'fit',
controller: 'main', // the same controller 'main'
items: [
xtype: 'askobjpanel'
]
);
askObjPanel.show();
,
onAskObjButtonFindPress: function()
var grid = this.lookupReference('payordGrpGrid'); // returns grid=null
console.log('Grid='+grid);
为什么在控制器事件'onAskObjButtonFindPress'中, lookupReference 返回 grid=null?
更新 我摆弄了这个例子here。 如果你按下 Button2,变量 'grid' 不为空,你可以改变网格的标题, 但如果你按下 Button1,那么 Button3,变量 'grid' 为空
【问题讨论】:
我认为您在这里遇到了一些范围问题。即使您对两个表单使用相同的控制器,当panel3
或askobjpanel
触发事件时,范围也不相同。这就是为什么在模态窗口中按下按钮时无法检索网格的原因。
【参考方案1】:
不知何故,您的小提琴无法正常工作。不管怎样,起初它被打开了,所以我做了改变并得出了结论。实际上,您在添加“AskObjPanel”时已经覆盖了视图。所以我做了相应的改变,它奏效了。你需要做的只是注释掉
controller:'main'
从这部分:
xtype: 'form-hboxlayout',
alias: 'widget.askobjpanel',
layout: 'form',
plain: true,
reference: 'askObjPanel',
controller: 'main',
并且也改变这个:
askObjPanel = this.getView().add(
modal: true,
title: 'Find obj',
floating: true,
closable : true,
resizable : true,
layout: 'fit',
items: [
xtype: 'askobjpanel'
]
);
这里还要删除那个控制器部分。它会起作用的。如果有任何问题,请告诉我。
对于评论者,我很抱歉,但我不知道这一点。不管怎样,谢谢你告诉我
【讨论】:
以上是关于ExtJs 模态面板控制器看不到我的网格的主要内容,如果未能解决你的问题,请参考以下文章
单击一行后,Extjs 4 网格自定义添加一个带有文本字段的面板