Extjs4 MVC、Ext.define() 和 Ext.create()
Posted
技术标签:
【中文标题】Extjs4 MVC、Ext.define() 和 Ext.create()【英文标题】:Extjs4 MVC, Ext.define() and Ext.create() 【发布时间】:2012-08-09 20:39:10 【问题描述】:首先,我的问题是我想知道 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', )
);
更改代码后,我遇到了无法在 Controller 中检索(grep)面板的问题,
在我这样做之前,
refs: [
ref: 'myGrid',
selector: '',
xtype: 'MyGrid', //view - alias
autoCreate: true
]
this.getMyGrid();
但更改后,我不知道如何在控制器中检索该面板。
在搜索网络以了解如何使用它时,我只是想知道'我对 Ext.define() 和 Ext.create() 的理解是否正确?为什么很多人使用 Ext.define() 方法,即使他们不再使用也不用于继承?'
请建议我了解 Extjs 的基础知识。
谢谢!
【问题讨论】:
【参考方案1】:我的 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 中使用,还是仅在联系中使用。
在唱出它的优点之后,它肯定是在文件数量之间进行权衡,这本身就是一个复杂性。
【讨论】:
以上是关于Extjs4 MVC、Ext.define() 和 Ext.create()的主要内容,如果未能解决你的问题,请参考以下文章
无法从gridpanel extjs4 MVC中的存储加载数据
如何在 extjs 4 (mvc) 中过滤静态 treeStore