许多类在使用配置对象创建(实例化)类时使用快捷名称。快捷名称称为别名
(如果类扩展了 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 : 对象
)。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 文档页面顶部的类名来查看类源代码。可以通过单击成员行右侧的“查看源代码”链接来查看类成员的源代码。
本指南提供使用 Sencha Architect 构建在桌面浏览器或平板电脑上运行的 Web 应用程序的分步说明。示例应用程序称为汽车列表,使用 Ext JS 6.x 框架使用经典工具包(尽管您可以在遵循本指南的过程中替换旧版本的 Ext JS)。
汽车列表是一个简单的应用程序,演示了数据绑定的使用。在最终的应用程序中,用户在网格中选择一辆汽车以查看有关该汽车的详细信息,包括它的图片。在本教程结束时,您应该更好地了解如何构建和配置视图、如何建模数据以及如何将数据绑定到视图。
在使用本指南之前,请执行以下操作
下载、安装和设置 Architect,然后按照安装和设置和保存、预览和构建中的说明设置 Web 服务器并在 Web 服务器上创建项目目录。
将数据文件示例下载到文件系统中的方便位置。(该示例的完整项目源代码可以作为存档下载,或者您可以查看GitHub 存储库。)
要开始您的项目
在 Architect 界面加载后,立即保存项目。出现提示时,输入以下内容
保存完成后,将出现“应用程序重命名”对话框。您可以单击“否”,因为这是一个新的应用程序。
然后项目应该开始初始化 Cmd。
将面板组件添加到项目中:在工具箱中搜索容器
类别,并将面板
拖到应用程序中心的画布上。
初始视图:创建面板后,MyPanel
将在项目检查器中的视图节点下列出。初始视图指示器出现在右侧。将光标悬停在其上,Architect 应该显示消息此组件是您的初始视图。这意味着面板将在应用程序运行时首先显示。请注意,initialView
配置在配置面板中也被选中。一个应用程序只能有一个初始视图。
再次保存您的项目
通过单击工具栏中的“预览”按钮来预览您的项目。
如果您使用的是 Sencha Cmd Web 服务器,请将URL 前缀设置为http://localhost:1841/
地址。
一个浏览器窗口启动,显示您添加到项目的单个面板。
在您完成本教程的过程中,您可以随时查看项目的代码。在画布或项目检查器中选择一个组件,并使用画布右上角的“设计”和“代码”切换按钮在设计视图和代码视图之间切换。
双击面板的标题,将其更改为汽车列表
。
通过选中配置面板中的复选框将frame
配置更改为true
。
选择面板并单击弹出式配置按钮(右上角的齿轮)。将布局配置设置为vbox
。这将垂直排列面板的未来子组件。
从工具箱的“网格”类别中拖动一个网格面板
,并将其放到画布上的面板容器中。请注意,您设置了顶级视图组件(在本例中为面板)的布局,以控制子组件的排列方式。
通过在画布或检查器中选择网格,然后单击配置面板中**标题**配置右侧的清除图标(“x”),从网格中删除标题栏。
将顶级面板的**userClassName**配置从MyPanel
更改为CarListings
。这将更改其在项目检查器中的名称。它还会更改底层源代码中Ext.define
生成的 JavaScript 类的名称。
注意:我们在这里使用vbox
布局,因为我们打算在垂直堆栈中添加更多面板。上面的示例本身可以使用单个网格面板来实现,并将frame
配置设置为 true。
如果您现在预览应用程序,您会看到一个没有数据且具有默认列标题(字符串、数字、日期和布尔值)的空网格。这是因为我们还没有将网格绑定到数据存储。让我们将网格绑定到一个新的存储并加载一些跑车的相关信息。
将您下载并解压缩的 数据文件 移动到您的项目目录。数据文件夹应该与您的CarListings.xds
文件位于同一级别。
如果您在纯文本编辑器中打开cars.json
文件,您可以看到数据的格式和键值对。让我们仔细看看保时捷 911 的条目(为了可读性而换行)。
{
data: [{
manufacturer: 'Porsche',
model: '911',
price: 135000,
wiki: 'http://en.wikipedia.org/wiki/Porsche_997',
img: '2004_Porsche_911_Carrera_type_997.jpg',
quality:
[{name: 'overall', rating:1},
{name: 'mechanical', rating: 4},
{name: 'powertrain', rating: 2},
{name: 'body', rating: 4},
{name: 'interior', rating: 3},
{name: 'accessories', rating: 2}]
},{
...
}]
}
接下来,我们将创建一个模型来在 Architect 中表示这些数据。
让我们创建一个具有我们想要了解汽车实体的适当字段(键)的模型。
单击项目检查器右上角的添加按钮(“+”),然后单击**模型**。一个名为MyModel
的新模型将出现在项目检查器的**模型**节点下。
选择新创建的模型,并将它的**userClassName**配置设置为CarData
。在配置面板中搜索**fields**。单击添加按钮(“+”),当提示您**输入一个或多个字段名称**时,在逗号分隔的字段名称中输入。
manufacturer, model, price, wiki, img, quality
单击完成或按 Enter 键。
现在我们有了表示数据结构的模型,我们可以创建一个使用CarData
模型的存储。
单击项目检查器右上角的“添加”按钮(“+”),然后在存储子菜单下选择**Json 存储**。将创建一个名为“MyJsonStore”的新存储。它将出现在检查器的存储节点下。
注意:JsonStore 会自动添加 JsonReader 并假设我们将以 JSON 格式加载数据。
检查器中新创建的存储的右侧应该出现一个警告图标,表示存储配置存在问题。单击该图标将提供有关配置无效原因的更详细信息。
在检查器中选择存储,并将**model**配置设置为CarData
。警告图标应该消失。我们将在步骤 5 中修复 MyAjaxProxy 的警告。
选择存储,并将它的**userClassName**配置设置为CarDataStore
。存储的名称应该在检查器中更新。
选择存储,并将它的**userAlias**配置设置为cardatastore
。
选择CarDataStore
下面的 AjaxProxy,并将它的**url**设置为data/cars.json
。请注意,此 URL 相对于您的项目。您的 URL 前缀必须设置正确才能在 Architect 中加载数据。
右键单击CarDataStore
,然后单击加载数据
。
注意:当代理的**url**配置或存储的**data**配置已设置时,上下文菜单中的加载数据
功能将启用。
将光标悬停在眼睛图标上将显示已加载到存储中的记录数。请注意,只加载了一条记录。
点击眼睛图标查看响应数据。查看响应数据,您可以看到单个实体位于数据数组中。这就是为什么只加载了一条记录。在 Inspector 中选择 JsonReader 并将其 `rootProperty` 配置设置为 `data`(或在 Ext JS 的早期版本中设置 `root` 配置)。您的 Store 现在已正确配置。
右键单击 `CarDataStore` 并再次单击 `Load Data`。由于我们对存储的配置进行了会影响数据加载的更改,因此 Architect 已清除数据缓存。
最后,将 Store 上的 **autoLoad** 配置设置为 `true`,这样我们就不必以编程方式加载它。
接下来,我们将网格绑定到 Store。由于网格绑定到 Store,因此 Store 中的记录发生任何更改时,网格都会自动更新以反映这些更改。此外,如果在 Store 中添加或删除任何记录,它们也会反映在网格中。
在 Inspector 中选择 Grid 面板。将其 **store** 配置设置为 `CarDataStore`。请注意,所有数据都消失了,因为我们的映射尚未设置。
右键单击 Inspector 中的 Grid 面板,然后选择“Grid Builder”。您现在应该会看到一个新的模式窗口,该窗口显示了我们之前输入的每个字段的列!
选中窗口底部的“Remove Existing”框以删除默认列。
单击生成,您应该会看到所有字段都变成了网格上的列。
**注意:**如果您使用的是旧版本的 Architect,可以使用“Auto Columns”代替“Grid Builder”。
保存您的应用程序,然后单击“Preview”。您可以在浏览器中看到您的网格及其数据。
如果您在浏览器中看到空白屏幕和/或空白网格,请确保以下内容
您已完成构建 CarListings 应用程序的第一步。
接下来,我们添加一个 Detail 面板,以在用户选择单个记录时显示有关网格中每个条目的其他信息。
选择顶层的 CarListings 面板。通过向下拖动面板的下边界来调整面板的大小,使其足够大以容纳 Detail 面板。使其高度大约是原来的两倍。
在 CarListing 面板仍处于选中状态的情况下,在工具箱中搜索“panel”。双击“Panel”以将新的 Panel 添加到项目 Inspector 中当前选定的项目。这是添加组件的另一种更常见且更快的做法,而不是拖放。
选择新添加的 Panel。搜索 **tpl** 配置,然后单击其右侧的“添加”按钮(“+”)。所有组件都有一个 **tpl** 配置,它接受一个 XTemplate。有关模板库的更多信息,请参阅 XTemplate 参考。
添加 **tpl** 配置后,单击其右侧的向前箭头图标以在中心舞台打开代码编辑器。将以下模板粘贴到代码编辑器中
`<img src="data/{img}" style="float: right" />
Manufacturer: {manufacturer}
Model: <a href="{wiki}" target="_blank">{model}</a><br>
Price: {price:usMoney}`
带有名称的波浪括号代表变量,这些变量方便地对应于我们 `CarData` 模型中的字段。
**注意:**这些步骤是按顺序执行的。当容器设置了 `vbox` 或 `hbox` **layout** 时,它们新添加的子项会自动将其 `flex` 配置设置为 **1**。如果您在将 **layout** 设置为 `vbox` 之前添加子项,则需要手动将每个子项的 `flex` 设置设置为 **1**。
让我们添加将两个面板通过事件绑定粘合在一起的代码。当用户在网格中选择特定条目时,我们希望应用程序使用我们刚刚设置的模板在下面的 Detail 面板中显示详细信息。
选择您最后添加的面板(包含模板的那个),并将它的 `itemId` 配置设置为 "detailPanel"。这使应用程序能够在 `CarListings` 类中轻松检索对该特定面板的引用。
清除 `title` 配置。
在项目检查器中选择网格面板,搜索 `View Controller Event Bindings` 配置,然后单击其右侧的“添加”按钮(“+”)。选择 `select` 事件,然后单击“完成”或按 Enter 键。
单击箭头图标以选择新的事件绑定。Architect 已经为新函数生成了一个合理的名称,但如果您愿意,可以使用 `fn` 配置更改它。
双击项目检查器中的事件绑定,以显示此事件处理程序的代码视图。请注意,我们只编写方法体。函数参数已经为我们定义好了。
将以下代码粘贴到事件处理程序中。
// grab a reference to the detailPanel via itemId
// the # in front of the id indicates that we would like to grab a reference by
var detailPanel = Ext.ComponentQuery.query('#detailPanel')[0];
// update the detailPanel with data
// this will trigger the tpl to become updates
detailPanel.update(record.data);
保存项目并在浏览器中预览它。当您在网格中选择特定记录时,其他信息应该出现在底部面板中。
为了开始这个项目的最后阶段,我们将添加一个图表来显示所选汽车的质量。
在检查器中添加第二个模型。将其 **userClassName** 配置设置为 `CarChart`。
检查 `quality` 字段的内容,如下所示。我们已经将 `quality` 字段从 `cars.json` 加载到 `CarStore` 中。现在,我们创建了一个额外的模型来专门用于图表绘制,以保存其内容。
"quality" : [{
"name" : "overall",
"rating" : 1
},{
"name" : "mechanical",
"rating" : 4
},{
"name" : "powertrain",
"rating" : 2
},{
"name" : "body",
"rating" : 4
},{
"name" : "interior",
"rating" : 3
},{
"name" : "accessories",
"rating" : 2
}]
在配置面板中,在 `CarChart` 模型中添加两个字段,它们直接映射到 `quality` 字段中定义的每个键。在模型中创建两个名为 `name` 和 `rating` 的字段。这些字段将直接映射到 `cars.json`。
创建一个存储,并将它的 **userClassName** 设置为 `CarChartStore`。直接单击子菜单 `Store` 会创建一个没有代理或读取器的普通存储。
通过将存储上的 `model` 配置设置为 `CarChart` 模型,将 `CarChart` 模型链接到 `CarChartStore`。
如果需要为图表留出更多空间,请调整 `CarListings` 面板的大小。
将一个额外的面板拖放到 `CarListings` 面板中。将其放在面板的标题或检查器中的视图节点上。因为网格被拉伸到顶层面板的大小,所以您不能将其放在中心。或者,您可以选择顶层面板,然后双击工具箱中的面板。
将其 itemId 配置设置为 `chartPanel`。
将一个柱状图拖放到第三个面板(您添加的最后一个面板,应该是画布中最底部的面板)上。
在检查器中选择新创建的面板,然后单击画布中它的弹出配置按钮(右上角的齿轮),并将它的布局设置为 `fit`。这会将图表在两个方向上拉伸以适应其父面板。
清除中间和底部面板的 `title` 配置。
在中间和底部面板周围添加边距。在检查器中选择中间面板(`detailPanel`),在过滤器字段中键入 "margins"。
将 **margin** 设置为 `5 0 0 0`。(注意要设置 Ext.layout.container.VBox 的 **margins** 配置,而不是 Ext.Component 的 **margin** 配置。)将相同的边距添加到底部面板(`chartPanel`)。
单击图表面板上的弹出配置按钮,然后选择 `CarChartStore`,将图表组件绑定到 JSON 存储。
**注意:**这会使图表消失,现在这没关系。我们只关心它在用户选择记录时显示出来。
在检查器中选择图表下的 `Category Axis` 以编辑图表的 x 轴。
此类别轴显示 CarListing 应用程序中汽车质量的类别。进行以下更改
将其 `fields` 配置从 `x` 更改为 `name`。
`name` 字段为图表的 x 轴提供值——质量类别。
在检查器中选择图表下的 `Numeric Axis` 以编辑图表的 y 轴。
数字轴将显示每个汽车质量类别的值。进行以下更改
Score
。将字段配置从y
更改为rating
。
此配置决定了轴上渲染的内容,但实际上不会影响图表上渲染的列。
将maximum
配置的值更改为5
,这将是 y 轴的最大值。
将minimum
配置的值更改为0
,这将是 y 轴的最小值。这很重要,因为它会导致 y 轴上的编号从 0 开始,而不是从报告的最低值开始。
将majorTickSteps
配置的值更改为4
。这决定了最小值和最大值之间有多少个标记。
在检查器中选择图表下的MyBarSeries
。在配置面板中,找到label
配置并将其更改为以下内容
{
display: 'insideEnd',
field: 'rating',
color: '#333',
'text-anchor': 'middle'
}
注意:我们必须引用键text-anchor
,因为它在键名中包含-
。
对MyBarSeries
进行以下额外更改。这些配置决定了作为图表上系列渲染的实际列。\
将xField配置更改为name
。
将yField配置更改为rating
。
将图表的itemId配置设置为qualityChart
,以便我们能够通过代码访问它。
在onGridpanelSelect
(之前在教程中添加到网格的事件处理程序)中添加以下代码,以便在用户选择记录时更新图表的 Store。
// grab a reference to the qualityChart, notice we use down here instead of child
// because down will go down the container hierarchy at any depth and child
// only retrieves direct children
var chart = Ext.ComponentQuery.query('#qualityChart')[0];
// get the quality field out of this record
var qualityData = record.get('quality');
chart.store.loadData(qualityData);
有关 Ext JS 图表 API 的更多信息,请参阅Ext.chart.CartesianChart API 文档页面。
让我们看看在浏览器中运行的应用程序。
首次保存项目时,Architect 会将运行项目所需的所有文件(包括.html
和 .js
文件,以及控制器、模型、存储和视图的 .js
文件)放在首次保存项目时指示的目录中。每次重新构建时,Architect 都会自动更新所有文件。
要查看最终应用程序,请启动浏览器或只需单击预览
,应用程序 UI 应该会显示。单击网格行,汽车详细信息应该会显示,以及汽车图像和显示各种类别汽车质量数据的图表。