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' 为空

【问题讨论】:

我认为您在这里遇到了一些范围问题。即使您对两个表单使用相同的控制器,当panel3askobjpanel 触发事件时,范围也不相同。这就是为什么在模态窗口中按下按钮时无法检索网格的原因。 【参考方案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 网格面板标题

ExtJS可折叠面板在展开时不呈现工具栏?

单击一行后,Extjs 4 网格自定义添加一个带有文本字段的面板

如何使用 json 和 sql 将数据导入 EXTJS 网格面板

在 ExtJS4 网格面板中获取对分页文本字段的引用

extjs 4.1.1 - 本地数据网格中的分页