Extjs4 MVC,Ext.define()和Ext.create()

时间:2012-08-09 20:39:11

标签: extjs4 extjs4.1 extjs-mvc

首先,我的问题是我想知道Ext.Define()和Ext.Create()之间的差异, 我想知道如何以正确的方式使用它们。

我查看了我的代码和许多Extjs4 MVC教程,

我在Extjs4 MVC项目中发现了很多Ext.define()方法。

我理解Ext.define()方法创建一个对象(CLASS)。

如果我需要一个面板,例如,我不会对面板进行任何继承,也不会在初始化后重复使用面板。

然后,我想我需要使用Ext.create()而不是Ext.define()。

所以,我试着改变我的代码@。@;

在视图中,它是

Ext.Define("App.view.MyGrid",{
    extend : 'Ext.grid.panel',
    alias : 'widget.MyGrid',
    initComponent : function(){
        this.columns : [{ header: 'column' }];
        this.store : Ext.create('Ext.data.ArrayStore', {})
    }
});

我改为,

var myGrid = Ext.create('Ext.grid.Panel', {
    layout: 'fit',
    border: false,
    columns: [{ header: 'column' }],
    store: Ext.create('Ext.data.ArrayStore', {})
});

更改代码后,我遇到了一个无法检索(grep)Controller面板的问题,

之前我这样做过,

refs: [
        {
            ref: 'myGrid',
            selector: '',
            xtype: 'MyGrid', //view - alias
            autoCreate: true
        }
]

this.getMyGrid();

但是在更改之后,我不知道如何在控制器中检索该面板。

在搜索网页以找到如何grep时,我只是想知道'我对Ext.define()和Ext.create()的理解是否正确?为什么许多人使用Ext.define()方法,即使他们不再使用而不是继承?'

请建议我理解Extjs的基本原理。

谢谢!

1 个答案:

答案 0 :(得分:6)

我的2c:我总是定义东西,然后创建它(除非是2个衬里组件)。这意味着我总是可以在其他地方重用一个组件,甚至不必考虑是否我想要的。

Ext.define也会在页面加载时产生错误,而不是组件init / construct(取决于编写代码的方式),这对我来说至少可以使调试更容易。

此外,似乎Ext.define实际上更快,这是一个大问题。 http://jsperf.com/extjs-create-vs-define-create

Ext.define也倾向于简化体系结构(因为它迫使你考虑将要调用的组件是什么,并且这有助于自动加载器的文件名(顺便提一下,这是另一个原因)使用Ext.define http://docs.sencha.com/ext-js/4-1/#!/api/Ext.Loader

带有Ext.define关键字的

requires也可让您玩创建sencha的自定义构建  通过sdk打包(http://www.sencha.com/products/sdk-tools/) - 我有点不确定这是在ExtJS 4中使用过,还是只是在触摸中。

唱完它的优点后,它肯定会在文件数量之间进行权衡,这是它自身的复杂性。