Extjs GridPanel构造器参数意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Extjs GridPanel构造器参数意思相关的知识,希望对你有一定的参考价值。

本人刚学习Extjs,学到这里的时候,发现,为什么这个构造器里面的参数是这么写的,查了API,里面也没有涉及到参数,看来看去,觉得很郁闷,为什么是这么写的?比如el,ds,cm,sm。。。这些东西都是怎么来的?看API么?
请高手指教
var grid = new Ext.grid.GridPanel(
el: 'grid3',
ds: ds,
cm: cm,
sm: sm,//添加的地方
title: 'HelloWorld'
);
重点给我讲这些cm,ds,sm是怎么来的,通过什么方法查到的

如楼上所说,其实都是一些简写,当然你可以把cm写成ColumModel,
系统定义了一套简写模式,叫做:ExtJs中的xtype类型.
定义

xtype就是一个代表类(Class)的标识名字。

譬如,你有这个类,名字是Ext.ux.MyGrid。正常情况下你需要用这个名字来实例化这个类(创建类的对象)。

除了类名外,你还可以这样登记类的xtype:

Ext.reg('mygrid', Ext.ux.MyGrid);

其中xtype 是 mygrid 而类名的一般形式是Ext.ux.MyGrid。上面的语句登记了新的xtype ,换种说法说,xtype mygrid 与类 Ext.ux.MyGrid是连在一起的。

到底有什么好处?

延时实例化
下面是一些资料,但是不全,你在网上再找找吧,我也初学
.基本组件:
xtype Class 描述
button Ext.Button 按钮
splitbutton Ext.SplitButton 带下拉菜单的按钮
cycle Ext.CycleButton 带下拉选项菜单的按钮
buttongroup Ext.ButtonGroup 编组按钮(Since 3.0)
slider Ext.Slider 滑动条
progress Ext.ProgressBar 进度条
statusbar Ext.StatusBar 状态条,2.2加进来,3.0 又去了
colorpalette Ext.ColorPalette 调色板
datepicker Ext.DatePicker 日期选择面板

容器及数据类组件
xtype Class 描述
window Ext.Window 窗口
viewport Ext.ViewPort 视口,即浏览器的视口,能随之伸缩
box Ext.BoxComponent 盒子组件,相当于一个 <div>
component Ext.Component 组件
container Ext.Container 容器
panel Ext.Panel 面板
tabpanel Ext.TabPanel 选项面板
treepanel Ext.tree.TreePanel 树型面板
flash Ext.FlashComponent 显示 Flash 的组件(Since 3.0)
grid Ext.grid.GridPanel 表格
editorgrid Ext.grid.EditorGridPanel 可编辑的表格
propertygrid Ext.grid.PropertyGrid 属性表格
editor Ext.Editor 编辑器
dataview Ext.DataView 数据显示视图
listview Ext.ListView 列表视图

工具栏组件:
xtype Class 描述
paging Ext.PagingToolbar 分页工具条
toolbar Ext.Toolbar 工具栏
tbbutton Ext.Toolbar.Button 工具栏按钮
tbfill Ext.Toolbar.Fill 工具栏填充区
tbitem Ext.Toolbar.Item 工具条项目
tbseparator Ext.Toolbar.Separator 工具栏分隔符
tbspacer Ext.Toolbar.Spacer 工具栏空白
tbsplit Ext.Toolbar.SplitButton 工具栏分隔按钮
tbtext Ext.Toolbar.TextItem 工具栏文本项

菜单组件:
xtype Class 描述
menu Ext.menu.Menu 菜单
colormenu Ext.menu.ColorMenu 颜色选择菜单
datemenu Ext.menu.DateMenu 日期选择菜单
menubaseitem BaseItem
menucheckitem Ext.menu.CheckItem 选项菜单项
menuitem Ext.menu.Item
menuseparator Ext.menu.Separator 菜单分隔线
menutextitem Ext.menu.TextItem 文本菜单项

表单及表单域组件:
xtype Class 描述
form Ext.FormPanel/Ext.form.FormPanel 表单面板
checkbox Ext.form.Checkbox 多选框
combo Ext.form.ComboBox 下拉框
datefield Ext.form.DateField 日期选择项
timefield Ext.form.TimeField 时间录入项
field Ext.form.Field 表单字段
fieldset Ext.form.FieldSet 表单字段组
hidden Ext.form.Hidden 表单隐藏域
htmleditor Ext.form.HtmlEditor HTML 编辑器
label Ext.form.Label 标签
numberfield Ext.form.NumberField 数字编辑器
radio Ext.form.Radio 单选按钮
textarea Ext.form.TextArea 多行文本框
textfield Ext.form.TextField 表单文本框
trigger Ext.form.TriggerField 触发录入项
checkboxgroup Ext.form.CheckboxGroup 编组的多选框(Since 2.2)
displayfield Ext.form.DisplayField 仅显示,不校验/不被提交的文本框
radiogroup Ext.form.RadioGroup 编组的单选按钮(Since 2.2)

图表组件:
xtype Class 描述
chart Ext.chart.Chart 图表组件
barchart Ext.chart.BarChart 柱状图
cartsianchart Ext.chart.CartesianChart
columnchart Ext.chart.ColumnChart
linechart Ext.chart.LineChart 连线图
piechart Ext.chart.PieChart 扇形图

数据集 Store:
xtype Class 描述
arraystore Ext.data.ArrayStore
directstore Ext.data.DirectStore
groupingstore Ext.data.GroupingStore
jsonstore Ext.data.JsonStore
simplestore Ext.data.SimpleStore
store Ext.data.Store
xmlstore Ext.data.XmlStore
参考技术A api上面都有的
el是把整个grid渲染到哪个dom里面,可以是id ,HTMLElement,EXT.Element
ds是grid的数据源,DataStore的简称
cm是ColumModel,就是配置列要怎么显示
sm是selectionModel,选择的模式
除了el其他在API中都能找到,api中的renderTo和el作用类似本回答被提问者采纳

extjs gridpanel:当 GridPanel 窗口再次显示时,ColumnModel 变为空

【中文标题】extjs gridpanel:当 GridPanel 窗口再次显示时,ColumnModel 变为空【英文标题】:extjs gridpanel: ColumnModel becomes null when GridPanel window shows again 【发布时间】:2011-11-21 17:08:42 【问题描述】:

我用预先配置的ColumnModel和Store定义了一个GridPanel,并将这个GridPanel放在一个Ext.Window中;当这个窗口显示时它工作正常,但是,如果我关闭它并再次显示它,GridPanel 的 ColumnModel 变为 null,因此该 GridPanel 无法正确呈现。

已更新(所有代码)

 var stSummary = new Ext.data.JsonStore( //define the store for Summary_Grid
        fields : [
        
            name: 'recID'
        , 
            name : 'name',
        ],
        data: []
    );

var colModelSummary =  //define the ColumnModel for Summary_Grid
    columns:
    [
        
            header : "ID",
            width : 50,
            sortable : true,
            menuDisabled: true,
            dataIndex : 'recID'
        ,
        
            header : "Name",
            width : 100,
            sortable : true,
            menuDisabled: true,
            dataIndex : 'name'
        
    ]
;

var reportConfig = 
    id : 'Report_Window',
    width : 250,
    floating : true,
    style : 
        opacity : 0.7,
    ,
    title : "Report",
    layout: 'fit',
    items : [
        xtype: 'tabpanel',
        id: 'Report_Tab',
        height: 200,
        activeTab: 1,
        items: 
        [
            
                xtype : 'grid',
                store : stSummary,
                colModel : new Ext.grid.ColumnModel(colModelSummary),
                stripeRows : true,
                id : "Summary_Grid",
                title : "Summary at",
                sm : new Ext.grid.RowSelectionModel(
                    singleSelect : true
                ),
                listeners: 
                    'beforerender': function() 
                        console.log(this.getColumnModel().getColumnCount());
                    
                
            , 
            
                xtype : 'form',
                id : 'Report_Form',
                title: 'Item Report',
                frame : true,
                labelAlign : 'left',
                bodyStyle : 'padding:2px',
                autoScroll: true,
                layout : 'column',
                items : []  
            
        ]
    ],
    resizable : 
        dynamic : true
    
;
var reportWindow = new Ext.Window(reportConfig);

reportWindow.show();

document.onclick = myClickHandler;


    function myClickHandler() 
      if(!Ext.getCmp('Report_Window')) 
        var reportWindow = new Ext.Window(reportConfig);
      

      Ext.getCmp('Report_Window').show();
    
);

和错误:

Uncaught TypeError: Cannot read property 'length' of undefined
Ext.grid.ColumnModel.Ext.extend.getColumnCount                  ext-all.js:11

【问题讨论】:

【参考方案1】:

我实际上只是将您的代码复制粘贴到我的应用程序中。我最后添加了 reportWindow.show() - 它有效!不知道有什么问题,你能显示所有代码吗?

请注意,这可能是关闭/隐藏问题,您是否每次都重新创建窗口?

编辑:

尝试将closeAction: 'hide' 设置为您的窗口配置。

查看详情:

http://docs.sencha.com/ext-js/3-4/#!/api/Ext.Window-cfg-closeAction

编辑 #2:

我再次测试了您的代码,它又可以工作了!我只更正了一些东西,比如额外的逗号——我的 resharper 建议这样做。 (它可能会导致 IE 出现问题)然后我将它放入 Ext.onReady - 它可以工作! Ext.version == '3.2.1'

检查整个代码:

Ext.onReady(function() 
    var stSummary = new Ext.data.JsonStore(
//define the store for Summary_Grid
            fields: [
                
                    name: 'recID'
                , 
                    name: 'name'
                ],
            data: []
        );

    var colModelSummary = 
//define the ColumnModel for Summary_Grid
        columns:
            [
                
                    header: "ID",
                    width: 50,
                    sortable: true,
                    menuDisabled: true,
                    dataIndex: 'recID'
                ,
                
                    header: "Name",
                    width: 100,
                    sortable: true,
                    menuDisabled: true,
                    dataIndex: 'name'
                
            ]
    ;

    var reportConfig = 
        id: 'Report_Window',
        width: 250,
        floating: true,
        style: 
            opacity: 0.7
        ,
        title: "Report",
        layout: 'fit',
        items: [
            xtype: 'tabpanel',
            id: 'Report_Tab',
            height: 200,
            activeTab: 1,
            items:
                [
                    
                        xtype: 'grid',
                        store: stSummary,
                        colModel: new Ext.grid.ColumnModel(colModelSummary),
                        stripeRows: true,
                        id: "Summary_Grid",
                        title: "Summary at",
                        sm: new Ext.grid.RowSelectionModel(
                            singleSelect: true
                        ),
                        listeners: 
                            'beforerender': function() 
                                console.log(this.getColumnModel().getColumnCount());
                            
                        
                    ,
                    
                        xtype: 'form',
                        id: 'Report_Form',
                        title: 'Item Report',
                        frame: true,
                        labelAlign: 'left',
                        bodyStyle: 'padding:2px',
                        autoScroll: true,
                        layout: 'column',
                        items: []
                    
                ]
        ],
        resizable: 
            dynamic: true
        
    ;
    var reportWindow = new Ext.Window(reportConfig);

    reportWindow.show();

    document.onclick = myClickHandler;


    function myClickHandler() 
        if (!Ext.getCmp('Report_Window')) 
            reportWindow = new Ext.Window(reportConfig);
        

        Ext.getCmp('Report_Window').show();
    
);

【讨论】:

感谢您的回复!我没有很清楚地表达自己。我刚刚附上了整个代码sn-p。当我点击右上角的 close_icon 关闭此窗口后,再次显示此窗口时会出现问题。当它再次显示时,网格面板丢失了它的标题,因为它的 ColumnModel 变为空/未定义。

以上是关于Extjs GridPanel构造器参数意思的主要内容,如果未能解决你的问题,请参考以下文章

(Extjs)对于GridPanel的各种操作

(Extjs)对于GridPanel的各种操作

无废话ExtJs 入门教程十七[列表:GridPanel]

前台extjs,后台java,导出 gridpanel的数据到execl中,如何做,求前台和后台action代码 ,

在 Extjs 中删除 GridPanel 的 headertoolbar

ExtJs - 通过 Gridpanel 的索引获取行