2017-04-04 54 views
0

我正在尝试构建ExtJS 6应用程序。 我有两个面板。ExtJs模式面板控制器没有看到我的网格

第一个(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回报格= NULL?

UPD 我做捣鼓这个例子here。 如果您按Button2,变量'网格'不为空,并且您可以更改网格的标题, ,但如果按Button1,然后Button3,变量'网格'为空

+0

我认为你在这里有一些范围问题。尽管对于两个表单使用相同的控制器,但当panel3或者askobjpanel触发事件时,它们的范围并不相同。这就是为什么当你按下模态窗口内的按钮时你无法检索网格。 – qmateub

回答

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

这里也删除该控制器的一部分。它会工作。如果有任何问题,请让我知道。

对于审稿人,我很抱歉,但我不知道这一点。无论如何,谢谢你让我知道