第二次选择时,extjs表单不会在面板中呈现

时间:2009-10-27 23:23:03

标签: javascript layout extjs

我有一个基本布局,可以使用树视图选择不同的组件,然后在主面板中渲染。这适用于我的所有组件(如网格),但有表格故障。

第一次选择表单时,没关系,只要您再次尝试选择它,就不会呈现任何内容。

此处提供了演示,并且页面顶部有一个指向javascript的链接。

http://www.somethingorothersoft.com/ext

组件的选择发生在selectNode函数中,我已经尝试了一切,但没有太多结果。

编辑,因为Jim Barrows指出在create function中实例化一个组件会更好。我一直犹豫不决,因为这是我真正的应用程序中的一个相当重大的变化,我想实际保持实例,以便于它们之间的导航。

现在我已经写了这篇文章,我意识到要正确地处理状态,我必须将它存储在服务器上,无论浏览器导航到另一个页面......

编辑我做了更改以始终实例化这样的表单,现在它更加极了:):

components['Form1'] = { xtype:'form', "items": [
 { "name": "Rep_ID", "allowBlank": false, "fieldLabel": "Rep" },
 { "name": "Date", "allowBlank": false, "fieldLabel": "Date", "xtype": "datefield" },
 { "name": "Time", "allowBlank": true, "fieldLabel": "Time", "xtype": "timefield"}],
 "defaults": { "xtype": "textfield" }
};

components['Form2'] = { xtype: 'form', "items": [
 { "name": "Date", "allowBlank": false, "fieldLabel": "Date", "xtype": "datefield" },
 { "name": "Time", "allowBlank": true, "fieldLabel": "Time", "xtype": "timefield"}],
 "defaults": { "xtype": "textfield" }
}

1 个答案:

答案 0 :(得分:0)

你的问题在这里:

var selectNode = function(node) {

    node.select();
    node = node.attributes;
    var newpanel = components[node.component].create();
    var cp = Ext.ComponentMgr.get('center_panel');
    cp.setTitle(node.text, node.icon);

    newpanel.hideMode = 'visibility';
    newpanel.hide();
    cp.removeAll();
    cp.add(newpanel);
    cp.doLayout();
    newpanel.show();
};

在这里:

create: function() { return this; } 

cp.removeAll()确实会破坏所有组件。因此,当调用create时,不会返回,因此不会显示任何内容。视口组件会自动销毁任何已删除的内容,并且面板会继承此功能。您可以将autoDestory设置为false,也可以在create中执行新操作。