Extjs-4中网格窗口重建面临的问题

Extjs-4中网格窗口重建面临的问题,extjs,grid,window,extjs4,Extjs,Grid,Window,Extjs4,我需要在窗口中渲染网格组件(使用close action destroy),以便创建新的窗口和网格组件,而不是隐藏和显示 我的代码在第一次渲染时运行良好,但在关闭窗口后,我无法再次创建它,在layout.js上出现问题 电话号码:150 错误:类型不匹配 ************ getting issue in the below method and "dom" is undefined********* moveItem : function(item, target, positio

我需要在窗口中渲染网格组件(使用close action destroy),以便创建新的窗口和网格组件,而不是隐藏和显示

我的代码在第一次渲染时运行良好,但在关闭窗口后,我无法再次创建它,在layout.js上出现问题

电话号码:150 错误:类型不匹配

 ************ getting issue in the below method and "dom" is undefined*********

moveItem : function(item, target, position) {
// Make sure target is a dom element
target = target.dom || target;
if (typeof position == 'number') {
position = target.childNodes[position];
}
target.insertBefore(item.el.dom, position || null); //dom is undefined 
item.container = Ext.get(target);
this.configureItem(item);
this.childrenChanged = true;
}


************
My controller and view of(grid and window) i have attached .Please identify where i am going wrong
************

Code:

**************************************************************************
Window Controller
**************************************************************************

Ext.define('Adapt.controller.versionManager.verManWinCont', {
            extend : 'Ext.app.Controller',
            views : ['versionManager.verManWinView'],
            init : function() {             
                this.control({
                            'verManWindow' : {                      
                                afterrender : this.verManWindowAfterRender
                            }
                        });
            },
            verManWindowAfterRender : function(win, options) {
            });


**************************************************************************
window View
**************************************************************************
Ext.define('Adapt.view.versionManager.verManWinView' ,{
    extend: 'Ext.window.Window',
    requires: ['Adapt.controller.versionManager.versionCont','Adapt.view.versionManager.versionGrdView', 'Adapt.store.versionManager.versionStor'],
    alias : 'widget.verManWindow',   
    constructor: function (config) {
    this.callParent([config]);},
     layout: 'fit',
     closeAction :'destroy',
    items: [{xtype: 'versionGrd'}],     
    autoShow :true,
    width : 580,
    height : 338,   
    closable : true,
    plain : true    
});

**************************************************************************
Grid Controller
**************************************************************************
Ext.define('Adapt.controller.versionManager.versionCont', {
            extend : 'Ext.app.Controller',
            views : ['versionManager.versionGrdView'],          
            stores : ['versionManager.versionStor'],
            models : 'Adapt.model.versionManager.versionModl',      
            init : function() {

                debugger;
                this.control({
                            'versionGrd' : {
                                itemdblclick : this.versionGridDoubleClick,
                                afterrender : this.versionGridAfterRender

                            }
                        });

            },
            versionGridAfterRender : function(grid, options) {debugger;


            }           
        });



**************************************************************************
Grid View
**************************************************************************

Ext.define('Adapt.view.versionManager.versionGrdView' ,{
    extend: 'Ext.grid.Panel',
    requires: ['Ext.grid.*','Adapt.view.versionManager.versionCreateView'],
    alias : 'widget.versionGrd',   
    store: 'versionManager.versionStor',
    columns:[
                {header: 'Name',  dataIndex: 'versionName',  flex: 1},
                {header: 'State', dataIndex: 'versionState', flex: 1}
            ],  
    constructor: function (config) {debugger;
    this.callParent([config]);},
    dockedItems: [] 

});
************************************************************************

(creating and showing in this handler)

In viewport Toolbar button handler(Controller)

this.getController('versionManager.verManWinCont');
this.getController('versionManager.versionCont');           
new Adapt.view.versionManager.verManWinView();//.show();
谢谢你的时间
vinod.P

我遇到了完全相同的问题,并通过将组件创建更改为解决了这个问题

原因是JavaScript中的对象是通过引用传递的,因此在下面的代码段中,每个网格实例共享相同的列对象:

Ext.define('Adapt.view.versionManager.versionGrdView' ,{
  extend: 'Ext.grid.Panel',
  columns:[
              { header: 'Name',  dataIndex: 'versionName',  flex: 1 },
              { header: 'State', dataIndex: 'versionState', flex: 1 }
          ]
});
使用factory函数方法,您可以创建如下所示的栅格视图:

Ext.define('Adapt.view.versionManager.versionGrdView' ,{
  extend: 'Ext.grid.Panel',

  initComponent: function() {
    config = Ext.apply({}, { items: this.buildColumns() });
    Ext.apply(this, Ext.apply(this.initialConfig, config));
    this.callParent();
  }

  buildColumns: function() {
    return [
        { header: 'Name',  dataIndex: 'versionName',  flex: 1 },
        { header: 'State', dataIndex: 'versionState', flex: 1 }
    ]
});

现在,每个新实例都有自己的columns数组副本,这就解决了部分配置已被破坏的问题。作为一个好的副作用,我还注意到,由于我只使用工厂方法,应用程序的启动减少了。

请检查发送给重新配置的列数组。

而且我也不会忘记接受答案/感谢花时间阅读我的查询并提供好答案的人。嘿@Netzpirat感谢您提供的时间,主要是有解释的好办法。@Netzpirat,我在extj中也有很多疑问,如果你能,回答man,1.如何销毁控制器并在需要时重新创建。也就是当我销毁窗口时,所有窗口都应该重新创建(网格、存储等)@vineth:要销毁控制器,只需在
Ext.application
中调用
this.getController('YourController').destroy()
,然后使用
this.getController('YourController').init(this)
。我已经在我的应用程序控制器中为此创建了helper方法。thnks yar我将尝试它,并将u ping回来