在 extjs4.1 和 4.2 中使用 CheckboxModel 删除和添加 Gridpanel 再次失败

Posted

技术标签:

【中文标题】在 extjs4.1 和 4.2 中使用 CheckboxModel 删除和添加 Gridpanel 再次失败【英文标题】:Remove and Add Gridpanel again fail with CheckboxModel in extjs4.1 and 4.2 【发布时间】:2013-09-27 14:18:48 【问题描述】:

我有一个带有layout: border 的面板,看起来像http://jsfiddle.net/rpcbX/

当我单击西部区域的add 按钮时,我使用中心区域的removeAll 并再次添加一些内容,在此示例中,我添加和删除网格面板。

但我的网格面板有CheckboxModel。并且在我再次添加网格面板后无法删除。 按照下面的步骤你会看到错误。

1. 运行我的应用并点击add 按钮 2. 点击网格面板上的checkall按钮 3.再次点击add按钮

现在你会看到错误,选择了选择,你不能点击checkall按钮来工作。看起来像

我认为当我单击添加按钮时,中心区域将有一个新的网格面板(新状态)

如何解决这个问题,谢谢

p/s:我在 extjs4.2.1 上进行了测试,结果更糟。我不能点击行上的复选框(我想我点击了那个但图形没有改变)

这是我使用add按钮的代码

                text: 'add',
                handler: function() 
                    panel.down('panel[region="center"]').removeAll();
                    var grid = new Example();
                    panel.down('panel[region="center"]').add(grid);
                

【问题讨论】:

【参考方案1】:

您的示例不起作用,因为您正在向原型添加实例,并且这些存储实例,selModel 可能列将在Example 的所有实例之间共享。您的示例遇到了未定义的行为。原型上的非原语通常是一件坏事,出于某种原因,我经常在 *** 上看到它们。 Here 是更深入的解释。

Example 执行此操作应该有助于解决您的问题。

Ext.define('Example', 
    extend: 'Ext.grid.Panel',
    title: 'Simpsons',
    initComponent: function() 
        Ext.apply(this, 
            selModel: Ext.create('Ext.selection.CheckboxModel', 
                checkOnly: true,
                mode: 'MULTI'
            ),
            store: Ext.create('Ext.data.Store', 
                fields: ['name', 'email', 'phone'],
                data: 
                    'items': [
                            'name': 'Lisa',
                            "email": "lisa@simpsons.com",
                            "phone": "555-111-1224"
                        , 
                            'name': 'Bart',
                            "email": "bart@simpsons.com",
                            "phone": "555-222-1234"
                        , 
                            'name': 'Homer',
                            "email": "home@simpsons.com",
                            "phone": "555-222-1244"
                        , 
                            'name': 'Marge',
                            "email": "marge@simpsons.com",
                            "phone": "555-222-1254"
                        
                    ]
                ,
                proxy: 
                    type: 'memory',
                    reader: 
                        type: 'json',
                        root: 'items'
                    
                
            ),
            columns: [
                    header: 'Name',
                    dataIndex: 'name',
                    editor: 
                        xtype: 'textfield'
                    
                , 
                    header: 'Email',
                    dataIndex: 'email',
                    flex: 1
                , 
                    header: 'Phone',
                    dataIndex: 'phone'
                
            ]
        );

        this.callParent();
    

);

【讨论】:

以上是关于在 extjs4.1 和 4.2 中使用 CheckboxModel 删除和添加 Gridpanel 再次失败的主要内容,如果未能解决你的问题,请参考以下文章

Extjs4.1 Grid-如何在 itemdblclick 函数中获取 cellIndex

如何使用extjs4.1在网格中按降序对带有连字符的浮点值进行排序

如何在 extjs4.1 中动态更新网格的摘要类型

如何在 extjs4 中更改 fieldLabel 样式

Extjs4.1:再现表单布局

如何在extjs4.1中减少轮播容器中三个视图的高度