Extjs4.2 MVC 动态添加删除组件

例子 :将一个grid添加到一个panel中去
panel

Ext.define('MyApp.view.MyPanel', {
    extend: 'Ext.panel.Panel',
    alias: 'widget.myPanel',//与controller中ref的selector关联
    height: 250,
    id: 'panel',
    width: 400,
    layout: 'fit',
    title: 'My Panel',
    initComponent: function() {
        var me = this;
        me.callParent(arguments);
    }
});

grid

Ext.define('MyApp.view.mygrid', {
    extend: 'Ext.grid.Panel',
    alias: 'widget.myGrid',//与controller中ref的selector关联
    requires: [
        'Ext.grid.column.Number',
        'Ext.grid.column.Date',
        'Ext.grid.column.Boolean',
        'Ext.grid.View'
    ],
    height: 250,
    id: 'grid',
    width: 400,
    title: 'My Grid Panel',
    initComponent: function() {
        var me = this;
        Ext.applyIf(me, {
            columns: [
                {
                    xtype: 'gridcolumn',
                    dataIndex: 'string',
                    text: 'String'
                },
                {
                    xtype: 'numbercolumn',
                    dataIndex: 'number',
                    text: 'Number'
                },
                {
                    xtype: 'datecolumn',
                    dataIndex: 'date',
                    text: 'Date'
                },
                {
                    xtype: 'booleancolumn',
                    dataIndex: 'bool',
                    text: 'Boolean'
                }
            ]
        });
        me.callParent(arguments);
    }
});

controller

Ext.define('MyApp.controller.MyController', {
    extend: 'Ext.app.Controller',
    views: [
        'mygrid',
        'MyPanel'
    ],
    refs: [
        {
            autoCreate: true,//必须自动创建对象,因为程序启动时只创建了主view(myPanel),这是在app.js中定义了的
            ref: 'grid',//引用名随意起,但是在生成get方法后首字母强制大写,如:getGrid()
            selector: 'myGrid',//必须与alias中widget.后的部分字符相同
            xtype: 'myGrid'//必须与alias中widget.后的部分字符相同,autoCreate必须声明xtype
        },
        {
            ref: 'myPanel',//主view
            selector: 'myPanel'
        }
    ],
    onLaunch: function() {
        var panel = this.getMyPanel();//controller根据ref生成的get方法,注意get后的首字母强制大写。
        panel.removeAll(true);//删 最好先删再定义grid 如果在按钮事件中,这样重复点击按钮不会出现addcls为null错误,大概是删的时候会清除css样式,如果这个时候已经有grid对象,则样式会丢失
        var grid = this.getGrid();//controller根据ref生成的get方法,注意get后的首字母强制大写。
        panel.add(grid);//添
        panel.doLayout();//刷新
    }
});
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值