我发现在Ext JS的很多示例中,传递一个带有xtype
属性的对象字面量,而不是实际创建Ext JS对象。
这有什么好处?如果对象最终还是要被创建,那么这样做是否能提高性能?
我发现在Ext JS的很多示例中,传递一个带有xtype
属性的对象字面量,而不是实际创建Ext JS对象。
这有什么好处?如果对象最终还是要被创建,那么这样做是否能提高性能?
xtype
是一种简写方式,用于标识特定的组件: panel
= Ext.Panel
、textfield
= Ext.form.TextField
等。 在创建页面或表单时,您可以使用这些 xtypes
而不是实例化对象。 例如,
items: [{
xtype: 'textfield',
autoWidth: true,
fieldLabel: 'something'
}]
此外,以这种方式创建页面可以使 Ext JS 懒加载页面。这就是你看到的“性能增益”。与在应用程序加载时创建大量组件不同,Ext JS 仅在用户需要查看它们时渲染组件。如果您利用选项卡或手风琴,则会有许多页面最初处于隐藏状态,因此应用程序将更快地加载。
此外,您可以创建并注册新组件,创建自己选择的 xtype。 Ext JS 类似地惰性地呈现您的组件。
您还可以通过 ID 检索组件。由于您的组件(以及 Ext JS 组件)可能提供一些不错的行为,所以有时查找和检索组件而不是简单的 DOM 元素或节点非常方便。
简而言之,xtype 识别组件,组件是 Ext JS 的一个关键方面。
我和Joe问了同样的问题,但我找到了答案。如果您使用xtype
,一种方法是在同一个对象中还指定itemId
:
{ itemId: 'myObject', xtype: 'myClass' ... }
然后您可以使用getComponent()
查找它,如下所示:
this.getComponent('myObject');
Ext.ComponentQuery.query()
进行查询。Ext.create('MyApp.view.MyButton', {
xtype: 'mybutton',
.....
});
var buttonArray = Ext.ComponentQuery.query('mybutton');
如果你创建组件时采用内联方式,那么 buttonArray
将包含该类类型的组件数组。使用 xtype 的另一个优点是,如果你移动了类(比如,在 "view" 下添加了另一个子目录:MyApp.view.button.MyButton
),那么你的组件查询仍然可以保持不变,因为 xtype 没有改变。一旦你的项目变得庞大,你将开始创建子目录并移动类。
xtype
是一个简单的名称,用于表示一个类。它是一个定义对象,在应用程序的任何部分使用时不需要实例化。
在注册 xtype
时,我们只需使用这个语法:Ext.reg(<xtype name>,<classname>)
。但是,我们不使用类名和 new
关键字,因为组件管理器将自动创建该类的实例,仅在需要时例如响应点击事件。
我们不需要手动获取实例,因为在注册了 xtype
后,“组件管理器”将自动为该 xtype
所代表的类创建一个实例,仅当它在应用程序中的其他地方使用时,或者如果没有在其他地方使用,则不会实例化该类。组件管理器运行此代码:
create : function(config, defaultType){
return new types[config.xtype || defaultType](config);
}
xtype
在Ext.Ready
运行时不会实例化类。但是,当Ext.Ready
运行时,新的Ext.Container()
将创建所有实例。因此,在大型应用程序中使用xtype
能够智能地消除垃圾对象。
Ext.create('full.clazz.Name', {})
,它实际上创建了一个同步AJAX调用(如果尚未加载)。 - Ruan Mendes