我的项目中有很多可重用的代码(一些 GUI、网格等)。Extjs 4 是否提供任何处理可重用代码的功能?示例:Java 具有可导入任何项目的库的功能。
4 回答
如果您非常了解 ExtJs 的核心,它会提供高度的可重用性。
这些不同的概念浮现在脑海中:
班级制度
ExtJs 最强大的特性之一是一切都被组织成一个类层次结构,所以本质上设计理念类似于 JAVA 或 C++ 中的设计理念。
例如,考虑您的网格从不显示标题。你会写:
Ext.define('HeadlessGrid', {
extend: 'Ext.grid.Panel',
hideHeaders: true,
});
因此HeadlessGrid
继承自Ext.grid.Panel
并仅修改其hideHeaders
配置。您可以更改组件的许多其他配置,还可以更改通过覆盖其方法来完成的行为。
有时,您希望 Ext 类本身改变,而不是继承 Ext 类。
所以是这样的:
Ext.override( Ext.grid.Panel, {
hideHeaders: true,
});
表示默认情况下所有网格组件都不会显示标题。
命名空间
“库”的概念可以使用命名空间来实现。因此,要继续前面的示例,您可能有:
Ext.define('Ext.Juice.HeadlessGrid', {
extend: 'Ext.grid.Panel',
hideHeaders: true,
});
现在HeadlessGrid
属于Ext.Juice
命名空间。
你可以像这样设置你的类加载器:
Ext.Loader.setPath('Ext.Juice', '../../libs/Juice');
现在,该文件夹下的任何类都可以被您编写的任何应用程序重用。
插件
插件允许您通过组合而不是继承来扩展(可见)组件。因此,将此插件添加到任何网格都会隐藏标题:
Ext.define("Ext.plugin.Decapitator", {
extend : "Ext.AbstractPlugin",
alias : "plugin.decapitator",
init : function( aPanel ) {
aPanel.hideHeaders = true;
},
});
混合
Mixins 允许您将类混合在一起,非常类似于多重继承。
以下代码(来自文档)将CanSing
类与Musician
类混合在一起。
Ext.define('CanSing', {
sing: function() {
alert("I'm on the highway to hell...")
}
});
Ext.define('Musician', {
mixins: ['CanSing']
})
@Mchl,
你使用的是MVC结构还是extjs 4.x版本的通用结构。如果您使用的是 MVC 结构,您可以在 app 文件夹中创建一个单独的文件夹(已经存在名为 view、model、controller的文件夹),例如。应用程序/组件。并使用 as 创建类
Ext.define('MyApp.component.componentName', {.....});
请注意,您必须包含 Ext.require('MyApp.component.componentName') 才能预加载代码。
您可以使用(或使用 xtypes)定义一个类Ext.define
并在整个应用程序中重用它。Ext.create
如果您在其他项目中需要相同的屏幕/类,您可以复制定义类的文件并使用它。
例子:
//Defining Class
Ext.define('Stack.Overflow', {
alias: 'widget.SO',
someProperty: 'something',
someMethod: function(s) {
alert(s + this.someProperty);
}
});
//Creating class with Ext.create:
var myClass = Ext.create('Stack.Overflow', {
extraProperty: 1337
});
//Creating component inline:
var panel = Ext.widget('panel', { // Equivalent to Ext.create('widget.panel')
title: 'Panel',
items: [{
xtype: 'SO',
extraColor: '#BADA55'
},{
xtype: 'SO', //reusable class
extraColor: '#FFFF00'
}]
});
是……一样的……把你想重用的组件放在一个库中,然后Ext.require()
用来导入到你的项目中。