javascript - ExtJs 模式面板 Controller 看不到我的网格

标签 javascript extjs extjs6

我正在尝试构建 ExtJS 6 应用程序。 我有两个面板。

第一个(Panel3)包含两个网格,并在“payordCmpGrid”网格调用的行项目上展开事件 在 Controller “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'
                    }
                }]
            }

...

Controller “主”

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);
}

为什么在 Controller 事件“onAskObjButtonFindPress”中, LookupReference 返回 grid=null?

更新 我摆弄了这个例子 here 。 如果按下 Button2,变量“grid”不为空,并且您可以更改网格的标题, 但如果你按Button1,然后按Button3,变量“grid”为空

最佳答案

不知何故,你的 fiddle 无法工作。不管怎样,一开始它被打开了,所以我做了一些改变并得出了结论。实际上,您在添加“AskObjPanel”时已经覆盖了 View 。所以我做了相应的改变并且它起作用了。您需要做的就是注释掉

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' }
        ]
    }); 

这里还要删除该 Controller 部分。它会起作用的。如有任何问题,请告诉我。

对于审稿人,我很抱歉,但我不知道这一点。不管怎样,谢谢你让我知道

关于javascript - ExtJs 模式面板 Controller 看不到我的网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43198354/

相关文章:

javascript - 如何在 Vuejs 中使用 webpack 更正 css 编译顺序?

javascript - 从另一个 Controller 调用 Controller 中的一个函数

javascript - 什么是所有控件加载保存的状态和存储数据的正确覆盖

extjs - 在 Extjs6 的组合框中包含 "Empty"选项的最简洁方法是什么?

javascript - 如何在 extjs6 中将文本字段与组合框值绑定(bind)?

javascript - ExtJS 6 - 我们应该在哪里编写样式?

javascript - 触发 onChange 时获取复选框状态

javascript - 正在做破坏吗?

php - Sencha Touch 文件上传问题

extjs - 在现有应用程序中使用 Sencha Cmd