许多类在使用配置对象创建(实例化)类时使用快捷名称。快捷名称称为别名
(如果类扩展了 Ext.Component,则称为xtype
)。别名/xtype 列在适用类的类名旁边,以便快速参考。
框架类或其成员可以指定为private
或protected
。否则,该类/成员为public
。Public
、protected
和private
是访问描述符,用于传达类或类成员的使用方式和时间。
Public 类和类成员可供任何其他类或应用程序代码使用,并且可以作为主要产品版本中稳定且持久的成员。公共类和成员可以通过子类安全地扩展。
Protected 类成员是稳定的public
成员,旨在供拥有类或其子类使用。受保护的成员可以通过子类安全地扩展。
Private 类和类成员由框架内部使用,不打算供应用程序开发人员使用。私有类和成员可能会在任何时候更改或从框架中省略,恕不另行通知,并且不应在应用程序逻辑中依赖它们。
static
标签。*参见下面的静态。以下是一个示例类成员,我们可以对其进行分析以显示类成员的语法(在本例中,从 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
的别名)。别名通常为了向后兼容而维护。默认情况下,可运行示例(Fiddle)会在页面上展开。您可以使用代码块左上角的箭头分别折叠和展开示例代码块。您也可以使用页面右上角的切换按钮切换所有示例的折叠状态。切换所有状态将在页面加载之间保留。
默认情况下,类成员在页面上处于折叠状态。您可以使用成员行左侧的箭头图标或使用右上角的展开/折叠所有切换按钮全局展开和折叠成员。
在较窄的屏幕或浏览器上查看文档将导致针对较小外形尺寸优化的视图。桌面视图和“移动”视图之间的主要区别在于
可以通过单击 API 文档页面顶部的类名称来查看类源代码。可以通过单击成员行右侧的“查看源代码”链接来查看类成员的源代码。
Ext JS 附带的默认主题可以开箱即用,用于创建简洁、专业的应用程序。但是,您可能希望提供自己的样式,以匹配您的个人设计美学或现有企业设计。
注意:您可以使用我们的图形工具 Sencha Themer 构建自定义主题。
从历史上看,为应用程序设置样式意味着创建包含规则的样式表,以调整或装饰用于呈现组件的单个 HTML 元素。这种方法会带来一些问题。第一个问题是,您现在需要跨所有支持的浏览器进行样式设置。其次,随着框架的演变,组件的底层元素可能会发生变化,这会让您面临着在样式规则中追逐这些变化的不愉快任务。使用 Ext JS 主题 API 为组件设置样式可以为您解决这些问题。
主题可以在工作区中的任意数量的 Ext JS 应用程序之间共享(工作区是由 Sencha Cmd 定义的简单文件系统结构)。主题允许您进行一次样式设置,并以自信的方式反复应用该样式,确保应用程序外观和感觉的一致性。
本指南列出了主题所需的条件,并介绍了创建自定义主题的基础知识。由于许多细节取决于您使用的是经典工具包还是现代工具包,因此本指南侧重于共同原则。具体内容请参见以下指南:Ext JS 现代工具包主题 和 Ext JS 经典工具包主题。
Sencha Cmd 是一个命令行工具,用于打包和部署 Ext JS 应用程序。要在 Ext JS 6.5+ 中构建主题,您必须在计算机上安装 Sencha Cmd 6.5 或更高版本。有关安装和开始使用 Sencha Cmd 的更多信息,请参见 Sencha Cmd 简介。
运行 Sencha Cmd 需要 Java JRE。我们建议尽可能运行最新版本的 JRE(撰写本文时为版本 1.8)。但是,运行 sencha app watch
需要 1.7 或更高版本。此命令在应用程序目录中运行,并在您修改主题源代码时自动更新编译后的主题。Sencha Cmd 有包含 JRE 的安装程序或没有 JRE 的独立安装程序。如果您还没有合适的 JRE,我们建议使用包含 JRE 的安装程序(如果您的平台可用)。
注意:如果没有 Java JRE 1.7+ 和 sencha app watch
,您需要在每次更改后使用 sencha app build --development
手动重建应用程序的样式。
自定义主题基于 Ext JS SDK 中包含的默认主题。下载 Ext JS 并将 Ext JS 开发工具包 (SDK) 解压缩到您选择的目录。我们建议您在主目录中创建一个名为 sencha-sdks
的文件夹。
安装完上述要求后,您可以继续创建自定义主题。主题只是特定类型的 Sencha Cmd 包。所有包都可以包含 JavaScript、CSS 样式和资源,这些资源将在 Sencha Cmd 构建应用程序时被合并到应用程序中。正如我们将看到的,主题包利用了所有这些类型的资产。
工作区是 Sencha Cmd 将应用程序(以及主题或其他代码包)与共享的 Ext JS 框架副本连接起来的方式。如果您只有一个应用程序要构建,Sencha Cmd 可以将工作区和应用程序合并到单个目录中。
在本教程中,我们将创建一个工作区,以便自定义主题可供多个应用程序访问。从您要创建工作区的目录(例如,“my-workspace”)运行以下命令
$ sencha workspace init
$ sencha framework add ~/sencha-sdks/ext-7.1.0
在 Windows 上,将 ~/sencha-sdks/
替换为 %USERPROFILE%\sencha-sdks\
。如果您选择了其他路径,请在此处使用相应的路径。
sencha workspace init
命令将在当前目录中创建 Sencha 工作区的脚手架。sencha framework add
命令将从 Ext JS SDK 中复制必要的文件到工作区,以便主题和应用程序可以找到这些依赖项。
此工作区是您的自定义主题包所在的目录。您还将在此处创建将使用您的自定义主题的应用程序。运行完上述命令后,您将在工作区目录中找到以下文件
sencha framework add
填充)。Sencha Cmd 通过生成包含所有必要文件的主题包来简化创建自定义主题的过程。按照以下步骤生成主题
sencha generate workspace/path/to/workspace
sencha -sdk ../ext generate app NewExtApp new-app
sencha workspace init
cd new-app
sencha generate theme my-theme
这告诉 Sencha Cmd 在工作区的 packages/local
目录中生成一个名为 my-theme
的主题包。让我们看一下自定义主题文件夹的默认内容
sass/var/
- 按类名组织的变量定义。sass/var/all.scss
- 全局变量设置。sass/src/
- 使用 sass/var
中定义的变量的规则和 UI 混合调用。sass/etc/
- 额外的实用程序函数或混合。sass/example
- 使用 Sencha Cmd 为 IE8/9 执行图像切片(不要删除)。(仅限经典)sass/src
和 overrides
中的文件和文件夹应组织为与您要设置样式或覆盖的组件类名匹配。例如,与 Ext.panel.Panel 相关的主题代码应放在名为 sass/src/panel/Panel.scss
的文件中。根据关联的类将混合调用和样式规则放在适当的文件中非常重要,这样 Sencha Cmd 才能在构建中仅包含应用程序所需的代码。
相同的组织可以应用于 sass/var/
。或者,如果您只有少量变量要设置,可以选择只使用 sass/var/all.scss
文件。由于设置变量不会影响生成的 CSS 的大小,因此将所有主题变量保存在单个文件中还是根据类名拆分到多个文件中,这取决于个人喜好或项目指南。
所有 Sencha 主题包都是更大主题层次结构的一部分。每个主题包都扩展了父主题或基础主题。创建自定义主题的下一步是选择要扩展的主题。Ext JS 为每个工具包提供了一些主题
现代工具包
theme-material
- Material Design 主题。theme-ios
- iOS 主题。theme-triton
- 现代扁平化、无边框主题。theme-neptune
- 现代无边框主题。经典工具包
theme-triton
- 使用字体图标的现代主题。扩展“theme-neptune”。theme-crisp
- 极简主义主题。扩展“theme-neptune”。theme-crisp-touch
- 基于 Crisp 的触摸主题。扩展“theme-crisp”。theme-neptune
- 现代无边框主题。theme-neptune-touch
- 基于 Neptune 的触摸主题。扩展“theme-neptune”。theme-classic
- 经典的蓝色 Ext JS 主题。theme-gray
- 灰色主题。扩展“theme-classic”。您的自定义主题应该扩展哪个主题?对于现代工具包,我们建议使用 theme-material
或 theme-triton
,而对于经典工具包,我们建议使用 theme-triton
、theme-crisp
或 theme-neptune
作为自定义主题的起点(或者在为平板电脑设置主题时使用 theme-neptune-touch
或 theme-crisp-touch
)。这些主题包含创建具有吸引力的开箱即用主题所需的所有代码。
theme-base
和(在经典中)theme-neutral
主题应被视为抽象主题,不应直接扩展。
在本教程中,我们将创建一个扩展 theme-triton
的自定义主题。第一步是使用扩展主题的名称配置您的自定义主题。这可以通过将 packages/local/my-theme/package.json
中的 extend
属性从其默认值更改为所需的值来完成
"extend": "theme-triton"
您的自定义主题现在已配置为使用 Triton 主题作为基础。您的自定义主题最初与默认的 Triton 主题相同。在接下来的步骤中,您将进行自己的更改以开始区分您的自定义主题。
构建主题将在您的主题包目录中创建一个 build
目录。在 my-theme/build/resources
中,您将找到一个名为 my-theme-all.css
的文件。此文件包含主题中所有 Ext JS 组件的所有样式规则。构建的主题文件包含所有 Ext JS 组件的所有样式,对于不使用 Sencha Cmd 的应用程序很有用。
注意:当该主题在 Sencha Cmd 应用程序中使用时,无需构建主题。当 Sencha Cmd 构建应用程序时,它会直接从主题的源代码中合并所需的 .js
和 .scss
文件。
为了快速开发和测试自定义主题,我们需要将其托管在 Ext JS 应用程序中。应用程序应设置为使用现代或经典工具包,具体取决于您的需求。要创建应用程序,请从工作区目录运行以下命令
$ mkdir demo-app
$ cd demo-app
$ sencha app init --ext65 --modern App
-- or --
$ sencha app init --ext65 --classic App
要将测试应用程序配置为使用您的自定义主题,请找到在 demo-app/app.json
中设置 "theme"
的行,并将其更改为
"theme": "my-theme",
Sencha Cmd 现在已在此子目录中生成了一个名为 App
的应用程序。接下来,我们将对主题和示例应用程序进行更改。我们希望 Sencha Cmd 检测到这些更改并自动将其编译到应用程序使用的输出 CSS 中。为此,请运行以下命令
$ sencha app watch --fashion
提醒:sencha app watch
命令需要 Java JRE 1.7 或更高版本。如果您无法运行 sencha app watch
,则需要在每次更改主题后运行 sencha app build --development
。为简洁起见,我们假设您正在运行 sencha app watch
。
运行 sencha app watch
后,您可以使用以下 URL 在浏览器中加载应用程序
http://localhost:1841/demo-app/
--fashion
开关将指示浏览器在您更改应用程序主题时刷新应用程序中的样式 - 通常不到一秒钟!
注意: 使用 --fashion
的实时更新仅在现代浏览器中受支持。对主题中样式的大多数更改将近乎实时更新,无需浏览器刷新。但是,修改组件尺寸的主题更改可能需要手动刷新浏览器。
Ext JS Classic 和 Modern 工具包对 API 的基本方法相同:它们定义变量来配置组件的默认外观,并提供可以生成自定义外观的 mixin。这些自定义外观被分配您选择的名称,这些名称使用 ui
配置属性应用于组件实例。由于与 ui
配置的关系,这些 mixin 通常被称为“UI mixin”或“主题 mixin”。
这些变量的名称因工具包而异,但有一些通用变量,例如 $base-color
,适用于两者。有关变量的完整列表,请参阅 Global_CSS。
在 Classic 工具包中,ui
配置是一个单字符串(例如 "custom"
)。此字符串是 mixin 调用输出的键,其中指定了此名称。在 Modern 工具包中,ui
配置更像是一个 CSS 类。它可以是一组用空格分隔的名称。每个名称都映射到传递给 mixin 调用的名称,但这些调用的结果更具可组合性。有关 ui
配置的更多详细信息,请参阅相应的工具包主题指南和 API 文档。
让我们从修改 $base-color
开始,这是一个值,许多 Ext JS 组件的颜色都是从该值派生的。由于在默认主题中使用了 $base-color
,因此对 $base-color
进行全局更改将对 Ext JS 库中的大多数组件产生影响。
创建文件 packages/local/my-theme/sass/src/Component.scss
并添加以下代码
$base-color: #317040;
$base-color
的值必须是有效的 HTML 颜色代码;请参阅 HTML 颜色代码 网页。
此时,您应该看到我们之前指定的绿色作为 $base-color
应用于屏幕上的组件。
注意: 主题变量都定义为动态的,因此不需要 dynamic()
声明来设置它们(如上所示)。但是,如果您想定义自己的变量,我们建议将它们设为动态的
$my-custom-color: dynamic(red);
有时主题需要更改组件的某个方面,而该方面只能通过 JavaScript 配置。这可以通过向您的主题包添加 JavaScript 覆盖来轻松实现。为了演示如何做到这一点,让我们更改自定义主题中面板的 titleAlign 配置。创建一个名为 my-theme/overrides/panel/Panel.js
的新文件,并添加以下代码
Ext.define('MyTheme.panel.Panel', {
override: 'Ext.panel.Panel',
titleAlign: 'center'
});
当您在浏览器中查看应用程序时,您会注意到所有面板标题都居中。虽然可以以这种方式覆盖任何 Ext JS 组件配置,但最佳实践是仅使用覆盖来更改影响组件视觉外观(而不是功能)的配置。
默认情况下,所有必需的图像资源都从父主题继承,但在某些情况下,您可能需要覆盖图像。这可以通过将所需的图像放置在my-theme/resources/images/
中并赋予它与它要覆盖的基本主题中的图像相同的名称来轻松完成。
在许多现代主题(如theme-triton
)中,几乎没有图像。这些主题使用矢量字体图标。因此,您可以用这种方式替换的图像取决于您选择的基主题。
如果您的主题需要与组件样式无关的函数或混合器(例如工具),则应将它们放置在主题的my-theme/sass/etc
目录中。
您可以根据自己的喜好组织此目录中的文件,但 Sencha Cmd 在构建中包含的唯一文件是my-theme/sass/etc/all.scss
。任何其他文件都必须由all.scss
文件导入(@import
)。有关遵循此模式的示例,请参见ext/classic/theme-base/sass/etc/
。
不与应用程序共享的样式应属于应用程序本身,而不是主题。Sencha Cmd 提供了一种简单的方法来添加应用程序级样式,允许您将样式直接组织在 JavaScript 代码旁边。
要编写与应用程序视图关联的 CSS 规则,请在与视图相同的文件夹中创建.scss
文件,并使用与视图相同的基名称。例如,要为视图App.view.main.Main
设置样式,您可以将Main.scss
添加到该文件夹中
demo-app/
app/
view/
main/
Main.js
Main.scss
MainController.js
MainModel.js
虽然添加任意 CSS 样式的能力提供了最大的灵活性,但最好避免直接为 Ext JS 组件拥有的元素设置样式。相反,应尽可能使用 Ext JS 主题 API 为其设置样式。使用主题 API 可以保护您的样式免受 Ext JS 未来版本中破坏性标记更改的影响。
应用程序充当主题层次结构中的最终级别。因此,应用程序可以更改主题变量。
让我们继续使用上面创建的demo-app
应用程序,并在应用程序中覆盖主题的$base-color
。创建Application.scss
文件
demo-app/
app/
Application.js
Application.scss
Application.scss
文件是全局设置的简单选项,因为它与Application
类的全局性质相匹配。并将以下内容添加到此文件中
$base-color: #724289;
在浏览器中查看应用程序,您将看到基本颜色已更改为紫色。
要在应用程序中进行重要的主题工作,您应该以与主题相同的方式创建sass
文件夹结构,并告知 Sencha Cmd 您的样式适用于所有命名空间(不仅仅是应用程序)。通常位于主题的sass
文件夹中的代码可以放置在应用程序的sass
文件夹中。
当 Sencha Cmd 构建您的样式时,它会查看应用程序中使用的所有 JavaScript 类。然后它会包含与这些类相一致的所有.scss
文件。此过程使用sass.namespace
将类名(如Ext.button.Button
)与包、主题或应用程序的磁盘上的文件对齐。
例如,在主题中,您可能拥有文件sass/var/button/Button.scss
以及文件sass/src/button/Button.scss
。这些文件将被视为匹配,因为主题的默认sass.namespace
是Ext
。
但是,应用程序的默认sass.namespace
是它自己的命名空间(App
)。这意味着 Sencha Cmd 不会将demo-app/sass/var/button/Button.scss
识别为Ext.button.Button
类的匹配项。相反,它将匹配App.button.Button
。要包含与所有命名空间匹配的文件,您需要在app.json
中将sass.namespace
设置为空字符串
"sass": {
"namespace": ""
}
完成此更改后,Sencha Cmd 将demo-app/sass/var/Ext/button/Button.scss
和demo-app/sass/src/Ext/button/Button.scss
与Ext.button.Button
匹配。
这意味着,如果您想使用sass
文件夹来组织视图的样式,则需要使用App
子文件夹。例如,sass/src/App/view/main/Main.scss
是与App.view.main.Main
匹配的路径。虽然这是以前版本中的模式,并且仍然受支持,但将视图样式放置在与其.js
文件相邻的.scss
文件中(如前所述)是一种更易于维护的结构。
Sencha Cmd 在编译应用程序时,会将主题、应用程序和任何必需的包(请参阅 Sencha Cmd 包指南)中的样式组合在一起。了解 Sencha Cmd 组合这些文件的方式非常重要,这样您就知道可以从主题或必需的包中使用什么,以及何时可以使用这些内容。
all.scss
文件的结构如下
+---------------------------------------+
| inclusion flags |
+-----------+-----------+---------------+
| | | base |
| | theme +---------------+
| | | derived |
| +-----------+---------------+
| | |
| etc | packages (dep order) |
| | |
| +---------------------------+
| | |
| | application |
| | |
+-----------+---------------------------+
| | | base |
| | theme +---------------+
| | | derived |
| +-----------+---------------+
| | |
| var | packages (dep order) |
| | |
| +---------------------------+
| | |
| | application |
| | |
+-----------+-----------+---------------+
| | | base |
| | theme +---------------+
| | | derived |
| +-----------+---------------+
| | |
| src | packages (dep order) |
| | |
| +---------------------------+
| | |
| | application (*) |
| | |
+-----------+---------------------------+
* - Includes application styles that are placed
next to their corresponding .js files.
在 sass/var
和 sass/src
的区域内,给定主题、包和应用程序的各个 .scss
文件始终按顺序排列,以匹配 JavaScript 类层次结构。例如,如果 base
主题在其 sass/var
文件夹中包含 Ext.Container 和 Ext.Component 的 .scss
文件,则 Ext.Component
的文件将包含在 Ext.Container
的文件之前,因为它扩展了 Ext.Component
。
此结构的目标和基本原理如下
sass/etc
中包含实用程序等sass/var
中,关注的是变量控制和派生计算。sass/src
,此顺序会产生正确的规则级联,以便包含标志变量是一组只读变量,定义为每个可能包含的 JavaScript 类的 true
或 false
。如果该类包含在应用程序构建中,则此变量的值为 true
。这些变量由 Sencha Cmd 动态创建,前缀为 $include-
,后跟完整的类名,其部分用 -
而不是 .
分隔,并且全部为小写。例如,如果构建使用 Ext.Img,您可以在自定义 mixin 中测试 true
@if $include-ext-img {
// styling contingent upon the presence of Ext.Img in the app
}
注意:在大多数指南中,我们建议使用 sencha app watch
来增量构建应用程序,以对应用程序和自定义主题进行更改。但是,$include-
变量在开发中(sencha app watch
在其中运行的环境)都设置为 true
。为了测试主题对 $include-
变量检查的使用,您需要构建应用程序以进行测试或生产
$ sencha app build --testing
$ sencha app build --production
您可以轻松地将刚刚构建的主题与第二个应用程序共享。只需导航到工作区目录并运行以下命令(注意:如果您按照上述步骤操作并运行了 sencha app watch
,则需要先使用 Ctrl+C
结束它)
$ mkdir another-app
$ cd another-app
$ sencha app init --ext65 --modern (or --classic) AnotherApp
这告诉 Sencha Cmd 在 another-app
目录中生成一个名为 AnotherApp
的应用程序,并使用与您创建的第一个应用程序相同的 Ext JS SDK。
下一步是告诉应用程序使用自定义主题。编辑 another-app/app.json
并将主题更改为
"theme": "my-theme",
为了确保在您进行更改时应用程序和主题的更改会被拾取,请再次将您的工作目录更改为应用程序目录并运行
$ sencha app watch --fashion
当您在浏览器中查看another-app/index.html
页面时,您现在将看到一个使用与App
相同的自定义主题的入门应用程序。
这涵盖了所有 Ext JS 主题的一般概念和常见做法。有关每个工具包的详细信息,请参阅以下指南:Ext JS Modern 工具包主题 和 Ext JS Classic 工具包主题。