许多类在使用配置对象创建(实例化)类时使用快捷名称。快捷名称称为别名
(如果类扩展 Ext.Component,则称为xtype
)。对于可应用的类,别名/xtype 会列在类名称旁边以供快速参考。
框架类或其成员可以指定为私有
或受保护
。否则,类/成员为公有
。公有
、受保护
和私有
是访问描述符,用于传达如何以及何时使用类或类成员。
公有类和类成员可供任何其他类或应用程序代码使用,并且可以依赖它们在主要产品版本中保持稳定和持久。公有类和成员可以通过子类安全地进行扩展。
受保护类成员是稳定的公有
成员,旨在供所有类或其子类使用。受保护的成员可以通过子类安全地进行扩展。
私有类和类成员在框架内部使用,不打算供应用程序开发人员使用。私有类和成员可能会在任何时候更改或从框架中省略,而不另行通知,并且不应在应用程序逻辑中依赖它们。
静态
标签。*请参见下面的静态。下面是一个示例类成员,我们可以对其进行剖析以显示类成员的语法(在这种情况下,从 Ext.button.Button 类中查看的 lookupComponent 方法)。
让我们看看成员行的每个部分
lookupComponent
)( item )
)Ext.Component
)。对于不返回除 undefined
之外的任何内容的方法,可以省略此项,或者可能显示用正斜杠 /
分隔的多个可能值,表示返回的内容可能取决于方法调用的结果(即,如果 get 方法调用成功,方法可能返回一个组件,如果失败则返回 false
,将显示为 Ext.Component/Boolean
)。PROTECTED
- 请参见下面的标志部分)Ext.container.Container
)。如果成员源自当前类,则源类将显示为蓝色链接,如果从祖先或混合类继承,则显示为灰色。查看源
)item : Object
)进行列出。undefined
之外的值,“返回”部分将注明返回的类或对象类型以及描述(在本例中为 Ext.Component
)自 3.4.0 起可用
- 示例中未显示)默认为:false
)API 文档使用许多标志来进一步传达类成员的功能和意图。标签可以用文本标签、缩写或图标表示。
classInstance.method1().method2().etc();
false
,则标记为可阻止的事件不会触发- 表示框架类
- 单例框架类。*有关更多信息,请参见单例标志
- 组件类型框架类(Ext JS 框架中任何扩展 Ext.Component 的类)
- 表示类、成员或指南在当前查看的版本中是新的
- 表示类型为 config
的类成员
- 表示类型为 property
的类成员
- 表示类型为 method
的类成员
- 表示类型为 event
的类成员
- 表示类型为 theme variable
的类成员
- 表示类型为 theme mixin
的类成员
- 表示类、成员或指南在当前查看的版本中是新的
在 API 文档页面上类名称正下方是与当前类拥有的成员类型相对应的按钮行。每个按钮按类型显示成员数(此计数在应用过滤器时更新)。单击按钮将导航到该成员部分。将鼠标悬停在成员类型按钮上将显示一个弹出菜单,其中包含该类型的所有成员,以便快速导航。
与类配置选项相关的 Getter 和 Setter 方法将显示在方法部分以及 API 文档和成员类型菜单的配置部分,位于它们所使用的配置正下方。Getter 和 Setter 方法文档将位于配置行中,以便于参考。
您的页面历史记录保存在本地存储中,并显示在顶部标题栏正下方(使用可用空间)。默认情况下,仅显示与您当前正在查看的产品/版本匹配的搜索结果。您可以通过单击历史记录栏右侧的 按钮并选择“全部”单选按钮来扩展显示内容。这将在历史记录栏中显示所有产品/版本的所有近期页面。
在历史记录配置菜单中,您还将看到最近访问的页面列表。结果按“当前产品/版本”和“全部”单选按钮进行筛选。单击 按钮将清除历史记录栏以及保存在本地存储中的历史记录。
如果在历史记录配置菜单中选择了“全部”,则将启用“在历史记录栏中显示产品详细信息”复选框选项。选中后,每个历史页面的产品/版本将与历史记录栏中的页面名称一起显示。将光标悬停在历史记录栏中的页面名称上也会将产品/版本显示为工具提示。
可以使用页面顶部的搜索字段搜索 API 文档和指南。
在 API 文档页面上,还有一个过滤器输入字段,它使用过滤器字符串过滤成员行。除了按字符串过滤外,您还可以按访问级别、继承和只读过滤类成员。这是使用页面顶部的复选框完成的。
API 类导航树底部的复选框筛选类列表,以包括或排除私有类。
单击空搜索字段将显示您最近的 10 次搜索,以便快速导航。
每个 API 文档页面(除了 Javascript 基本类型页面)都有一个与该类相关的元数据的菜单视图。此元数据视图将包含以下一个或多个内容
Ext.button.Button
类的备用类名为 Ext.Button
)。备用类名通常用于向后兼容。默认情况下,可运行示例(Fiddles)在页面上展开。您可以使用代码块左上角的箭头单独折叠和展开示例代码块。您还可以使用页面右上角的切换按钮切换所有示例的折叠状态。切换所有状态将在页面加载之间记住。
默认情况下,类成员在页面上折叠。您可以使用成员行左侧的箭头图标或全局使用右上角的展开/折叠所有切换按钮来展开和折叠成员。
在较窄的屏幕或浏览器上查看文档将导致针对较小尺寸进行优化的视图。桌面和“移动”视图之间的主要区别是
可以通过单击 API 文档页面顶部的类名来查看类源。可以通过单击成员行右侧的“查看源”链接来查看类成员的源。
类系统是 Ext JS 和 Sencha Touch 框架最强大的功能之一。它为您的 JavaScript 应用程序带来了经典继承的结构、灵活性和可重用性。此类系统是所有 Ext JS 应用程序的基础。
有关更多背景信息,请参阅以下指南
Architect 生成标准 Ext JS 代码,因此它也支持类系统。Architect 还提供了一些设施,用于在您的应用程序中重用类。
本文档介绍
以一种可以重复使用代码的方式构建应用程序是创建可维护软件的基本要素。Sencha Architect 帮助您将应用程序细分为可重复使用的类。
Architect 检查器中的每个顶级实例都表示一个类。
Architect 使您能够从上到下或从下到上构建应用程序。如果您从单个视图容器开始,则以后您将需要分解应用程序的部分(通过提升到类)。如果您通过专注于构建各个特定屏幕来开始设计应用程序,然后希望稍后组装它,则可以使用链接实例来完成此操作。
从 Sencha Architect 3.0 开始,您还可以创建一个用户扩展包,其中包含一个或多个类。这可以自行发布,然后导入到其他项目中;安装后,用户扩展组件可以从工具箱拖动到任何兼容的项目。有关创建用户扩展包的更多信息,请参阅创建用户扩展。
当您将项目从工具箱添加到项目中时,在控制器、视图、存储或模型检查器节点中添加为顶级项目的所有内容都将成为生成的应用程序代码中的类。例如,如果您将面板从工具箱拖动到画布的空白区域或检查器中的视图节点,那么为该面板生成的代码看起来如下所示
Ext.define('MyApp.view.MyPanel', {
extend: 'Ext.panel.Panel',
height: 250,
width: 400,
title: 'My Panel',
initComponent: function() {
var me = this;
Ext.applyIf(me, {
items: [
{
xtype: 'button',
text: 'MyButton'
}
]
});
me.callParent(arguments);
}
});
这是一个使用类系统的define API 的标准类。当您保存项目时,Architect 将为该类生成一个单独的文件 app/view/MyPanel.js
。
让我们更详细地分解此生成的代码。
Ext.define('MyApp.view.MyPanel', {
此行在 MyApp.view
命名空间中定义了一个名为 MyPanel
的类。根据 Sencha 的模型-视图-控制器 (MVC) 包的约定,所有视图组件都会自动放入此命名空间。名称 MyPanel
由 Architect 自动生成,但您可以通过修改配置面板中的 userClassName
属性来选择自己的类名。建议您选择适合应用程序中类的类名。
extend: 'Ext.panel.Panel',
这指定类继承 Ext JS 标准 Ext.panel.Panel
类的基本配置和实现。此值由 Architect 根据创建组件的工具箱类型生成。只能通过其上下文菜单中的转换列表将组件转换为另一种类型来更改它。(注意:请参阅以下有关自定义类的部分,了解如何扩展未出现在工具箱中的类。)
height: 250,
width: 400,
title: 'My Panel',
您的类的简单配置属性显示在此处。仅显示您指定的且与其父类的继承默认值不匹配的值。
initComponent: function() {
var me = this;
Ext.applyIf(me, {
//...
});
me.callParent(arguments);
}
复杂配置(例如对象字面量和子项目配置——任何不应在实例之间共享的内容)显示在此处。
除了配置属性之外,您还可以通过将基本函数从工具箱拖动到类上或单击配置面板中函数项目旁边的添加按钮(“+”)将实例方法添加到类。为结果函数指定名称和可选参数,然后双击它以打开 Architect 代码编辑器并编辑其实现代码。
同样,您可以使用静态函数工具箱项目将静态方法添加到类。
以下类配置属性也可以在任何顶级类项目上设置;这些是高级配置,只有在您对 Architect 和框架有高级知识时才应修改。
Sencha 类系统的另一个组成部分是动态类加载器。由于 Architect 在单独的 JavaScript 文件中生成您的类,因此必须声明应用程序的每个类,以便框架知道加载它们。
为了简化此流程,Architect 会自动将大部分顶级类添加到 Application 节点的 config 中的 Controllers、Views、Stores 和 Models 数组中。这些列表中的所有类都会在应用启动时加载。如果您愿意,也可以将各个类添加到各个控制器中对应的数组中。Architect 为您提供了从 Application 节点中移除类的选项。
某些类可能不会自动添加到这些列表中,在这种情况下,您需要将它们手动添加到 Application 节点或使用它们的特定控制器、视图、模型或存储类的 requires
config 中。
虽然此处描述的功能支持从工具箱中的受支持项创建类,但有时您可能需要创建一个纯父类或扩展工具箱中未出现的另一个类的类。您可以在 Architect 中使用工具箱中的 Class 项或在 Project Inspector 顶部单击“+”号时显示的下拉列表中的“Class”项来执行此操作。
可以将自定义类添加到 Controllers、Views、Stores 或 Models Inspector 节点。自定义类可以像任何其他类一样进行配置,此外还可以让您完全控制 Ext.Class#cfg-extend config。您可以使用 Config 面板的搜索字段和 Add 按钮添加自己的 config,并按上述方式添加方法。
要将自定义类包含在您的应用程序中,您可以将其添加到 Application 或使用它的特定控制器、视图、模型或存储类的 requires
config 中。
请注意,通过这种方式创建的任意自定义类有一些限制。它不能在 Canvas 中呈现或用作链接实例的父级,因为 Architect 不了解其基本实现。这将在未来版本中得到改进。如果您明确将自定义类的 extend
config 设置为已知类,例如 Ext.button.Button
,Architect 为您提供了将其转换为成熟的按钮子类的选项,并允许将其用作画布,就像您从工具箱中拖出按钮一样。
您可以通过右键单击工具箱中的类,然后单击“Create Override for the Class”来创建对框架类的覆盖
覆盖显示在 Project Inspector 面板的 Resources 节点下,名称为 Panel.js。选择该组件并打开 Code Panel 以对其进行修改。
您通过这种方式创建的覆盖随后将应用于整个项目中该框架类的所有实例。这可用于为组件实现某种专门行为或应用修复框架中严重错误的热修复。
请注意,您还可以只为您的类实例创建覆盖。
Save to Toolbox 允许您将项目的顶级组件直接保存到组件工具箱中以供以后使用。此功能使您能够在多个项目中保存和重复使用组件。要保存您已经构建的组件(包括其所有 config 和任何子组件),请选择您要保存的顶级组件,然后转到 Actions-->Save to Toolbox。Architect 会提示您重命名组件并选择组件将显示其中的工具箱类别,如下所示
输入名称并选择适当的类别后,单击 OK,Architect 会将组件保存到工具箱。然后,该组件可供重复使用(在同一项目或其他项目中);它会以您指定的名称显示在指定的类别中,由绿色组件图标表示。您可以在您选择的类别下找到它,或者在工具箱顶部的 Filter 字段中输入您给组件的名称。
要更新已保存的组件,请在您的项目中进行修改,然后使用相同的名称再次将其保存到工具箱。Architect 允许您覆盖原始组件并将其保存到同一类别。
将组件导出到文件非常简单。只需在检查器中右键单击目标组件。您将看到“Export to File”选项,如下所示。
单击“Export to File”,您将收到一个提示,让您将文件保存到您的计算机。
使用“导出到文件”功能导出的组件随后可以导入到其他开发人员的 Architect 实例中,以供在其他项目中进一步开发或重复使用。请注意,只能将 Sencha Architect Ext JS 环境中创建的组件导入到 Ext JS 项目中。
如果其他开发人员对导出的组件进行了添加,则可以将其重新导入 Architect 并重新添加到项目中。这是与团队其他成员在单个 Architect 项目上协作的绝佳方式。要导入已导出的组件,请确保已将导出的组件放置在可访问的位置,无论是在桌面上还是在服务器上。在 Architect 中,打开“编辑”菜单并选择“导入组件”。导航到组件的位置,选择它,然后单击“打开”。Architect 会提示您重命名组件并选择组件将显示在其中的工具箱类别,与将组件保存到工具箱时使用的对话框相同。请参阅“保存到工具箱”下方的上图。
输入名称并选择适当的类别后,单击“确定”,Architect 会将组件保存到工具箱。该组件现在可在工具箱中使用,可将其添加到任何 Architect 项目中,就像您添加任何其他组件一样。
链接实例使您能够在应用程序中创建和重复使用组件。通过使用链接实例,可以简化在 Architect 中构建具有许多视图的大型项目。Architect 链接实例功能的目的是重复使用:您构建一个自定义组件或 xtype,然后创建它的链接实例,以便在应用程序中需要时在任何地方重复使用新 xtype。
类旨在成为可多次实例化的可重复使用单元,因此 Architect 支持链接实例的概念以允许这样做。任何顶级视图类都可以链接到其他视图中的一个或多个位置;这些生成的链接实例将通过其 xtype
引用其类,您可以通过设置其 userAlias
配置来控制它。还可以通过选择任何子视图组件并从其上下文菜单中选择“提升到类”来创建链接实例。
创建同一组件的多个链接实例使您能够通过编辑原始组件来一次性更改所有组件,并且每个链接实例都会继承所有更改。您仍然可以分别编辑每个链接实例。对链接实例所做的更改将覆盖您赋予原始组件的属性。当您使用另一个 Architect 功能“提升到类”时,这尤其有用,您可以通过右键单击检查器中的组件来访问该功能。
要了解有关如何使用链接实例的更多信息,请遵循此示例
SpecialForm
,并将它的 userAlias 设置为 specialform
。以下是您应该在检查器中看到的内容MyWindow
中创建一个 SpecialForm
的链接实例(称为 MyForm...
),还会创建一个名为 specialform
的 xtype,可以在应用程序中的其他地方重复使用。以下是检查器现在应该如何显示的内容让我们在视口中重复使用 specialform
。
SpecialForm
拖动到视口中。SpecialForm
的链接实例(MyForm...
)。您项目的检查器现在应该看起来像这样
SpecialForm
的每个新实例(窗口和视口下的 MyForm...
),并在画布中查看它。每个实例都将具有添加到 FieldSet 中的两个字段,该 FieldSet 是原始 SpecialForm
的一部分。 SpecialForm
,并向其 FieldSet 添加一个新的文本字段。在检查器中,再次选择窗口和视口中的链接实例。您可以在画布中看到每个表单也包含新字段。Architect 还允许您对每个链接实例进行更改。假设您想更改视口中表单的名称。为此,选择视口下的MyForm...
,并在配置面板中编辑其标题配置。更改将仅对SpecialForm
的该实例进行。
有些事情无法使用 Architect 拖放可视化界面完成。例如,假设您只想向视口中表单的实例(而不是窗口中的版本)添加一个 ComboBox。
为此,创建一个有条件包含 ComboBox 的覆盖
showCombo
。然后,您可以对表单的视口实例设置自定义配置。您将无法在画布设计视图中看到 ComboBox,因为 Architect 不知道查找覆盖代码。但是,它将在运行时完美工作,并且 ComboBox 将按预期在浏览器中显示。Architect Kiva 示例应用程序说明了链接实例和提升到类进程。您必须指定一个覆盖才能将自定义外部库添加到 Architect,并在 Architect 的组件中使用这些库。在 Kiva 示例应用程序中,提供了一个特殊的 JSONP 代理库,它通过 YQL 传递以执行 Architect 可以本机处理的查询。
这是通过添加一个库 KivaProxy.js 作为资源来实现的。然后,不是添加一个 JSONP 存储,而是添加一个普通存储,并手动覆盖代码以使用 KivaProxy.js 中的代码(在该文件中给出了别名“proxy.kiva”)。Architect 2.1 代码中的摘录说明了这一点
Ext.define('Kiva.store.override.Loans', { override: 'Kiva.store.Loans',
requires: [
'Kiva.model.Loan'
],
config: {
autoLoad: true,
model: 'Kiva.model.Loan',
remoteFilter: true,
storeId: 'Loans',
proxy: {
type: 'kiva',
reader: {
type: 'json',
successProperty: 'success',
rootProperty: function(data) {
if (data.error || data.query.count === 0) {
return [];
} else {
return data.query.results.loans;
}
}
}
}
}
});
此方法有一些严重的缺点
出于这些原因,createAlias 功能已添加到 Architect 2.2 中。这些覆盖仍然适用于更高版本,但以下描述的功能对于正在开发的项目来说更容易维护。
Sencha Architect 2.2 及更高版本包括称为createAlias和createClass的功能,使开发人员能够引入外部库,在不使用代码覆盖的情况下将自定义代码插入组件中。许多应用程序与 Sencha 框架一起使用其他库,而createAlias和*createClass配置允许通过为外部组件设置 xtype 或类名来更简单地集成这些外部 JavaScript 库。
Architect Kiva 示例应用程序说明了如何通过使用 createAlias 和无覆盖来实现相同的效果。相反,通过以下方式实现相同的效果
这不仅实现起来更快,而且还提供了使用简单 GUI 的灵活性和便利性,以继续对存储、代理和/或读取器进行任何进一步的自定义。createAlias为您提供了一个名称来引用子组件,然后您可以轻松地使用此名称引用该子组件,而不必像在 Architect 2.1 中那样覆盖存储。
上面显示的过程仅适用于顶级组件。需要不同的过程来保存和导出子组件。例如,如果您有一个 LoginScreen 容器,并且您想向其中添加一个先前创建的 LoginForm 组件,您可以将 LoginForm 组件拖放到 LoginScreen 容器上并建立一个链接实例。链接实例类似于面向对象编程术语中所说的对象实例。因此,直接对 LoginForm 组件进行的任何更改都将反映在链接实例中。您可以创建任意数量的链接实例,可以通过拖放顶级组件或复制现有的链接实例来创建。通过使用此技术,您可以分别构建项目的每个逻辑部分,然后通过将链接实例建立到聚合容器(例如视口)中来查看所有这些部分。
Architect 2.1 提供了链接实例和提升到类功能,使您可以创建顶级组件的实例作为另一个顶级组件的子项。请注意,Architect 2.2 引入了 createAlias 功能(如下所述),这是一种实现相同目标的更简单、更好的方法。
链接实例在构建复杂项目时非常有用。如果您创建同一组件的多个链接实例,则可以通过编辑原始组件一次性更改所有实例,并且每个链接实例都会继承所有更改。您仍然可以分别编辑每个链接实例;对链接实例所做的更改将覆盖您赋予原始组件的属性。当您使用另一个 Architect 功能“提升到类”时,这尤其有用。
组件中的任何子项都可以使用“提升到类”功能提升到顶级组件,并在 Architect 项目目录中成为其自己的类。例如,网格列只能在最初创建时添加到网格面板或树面板,因为它们本身没有任何用途。
为此,首先将网格面板拖动到检查器中的视图。默认情况下,新的网格面板会收到几列。在检查器中右键单击“布尔值”(其中一列的标题)并选择“提升到类”。
该列成为其自己的顶级组件,并在检查器中被链接实例替换。当 Architect 导出项目时,它会为组件/类生成一个单独的 .js 文件。这适用于 Architect 中的大多数视图组件。
如果您与团队合作,使用此功能可以更轻松地共享和管理项目。除了生成更易于管理的代码外,将 Architect 项目组织为顶级组件的集合还可以更轻松地继续开发项目。通过在主应用程序视图中使用链接实例,仍然可以轻松地在上下文中查看所有顶级组件。“提升到类”与链接实例协同工作,让您可以将任何嵌套组件转换为顶级组件。当您执行此操作时,Architect 会在您保存和归档项目时为该组件创建单独的 .js
文件。当您使用“提升到类”时,原始组件将被一个链接实例替换为其新的顶级版本。这使得将大型组件分解为更小、可重用且更易于管理的子集变得很容易。这也意味着您可以在我们的新组件类上实现行为、覆盖函数或实现函数类型配置选项。