许多类在使用配置对象创建(实例化)类时使用快捷名称。快捷名称称为别名
(如果类扩展了 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 文档页面顶部的类名称来查看类源代码。可以通过单击成员行右侧的“查看源代码”链接来查看类成员的源代码。
本指南旨在提供一些关于如何使用 Futures API 的示例,并应有助于说明它们在测试 Web 应用程序时是多么强大和灵活。
如何使用 .reveal()
API 滚动到(显示)网格中的特定行。
// URL: http://examples.sencha.com/extjs/latest/examples/kitchensink/?classic#big-data-grid
describe('Grid row reveal', function() {
it('should scroll to a row in the grid', function() {
ST.grid('big-data-grid')
.rowAt(50)
.reveal();
});
});
如何从 Store 中获取网格行的底层记录,并断言其中一个值是正确的。
// URL: http://examples.sencha.com/extjs/latest/examples/kitchensink/?classic#array-grid
describe('Grid data check', function() {
it('should contain correct data in the row', function() {
ST.grid('[title="Basic Grid"]')
.rowAt(3)
.getRecord()
.and(function(row) {
// Option 1:
expect(row.data.record.price).toEqual(89.96);
// Option 2:
expect(this.future.data.record.price).toEqual(89.96);
});
});
});
如何与网格列的菜单交互,定义过滤器,并检查从后端返回的正确数据。
注意:WebDriver 示例
// URL: http://examples.sencha.com/extjs/latest/examples/kitchensink/?classic#grid-filtering
describe('Grid filtering', function() {
var rowCount;
it('should add a filter to a column', function() {
var driver = ST.defaultContext.driver;
// This code moves the mouse over one of the column's headers which
// shows the trigger to display the column menu
ST.element('gridcolumn[text="Company"] => .x-column-header-text-container')
.get('id')
.and(function() {
driver.moveToObject('#' + this.future.data.id);
});
// This clicks the column header trigger which displays the column menu
ST.element('gridcolumn[text="Company"] => .x-column-header-trigger')
.click();
// This references the column header menu and clicks the "Filters" item
// to show the "Filters" sub-menu, then enters a value in to the text
// field within the filter sub-menu
ST.component('menu[activeHeader]')
.gotoComponent('menuitem[text="Filters"]')
.click()
.gotoTextField('textfield')
.focus()
.type('Inc')
.wait(1000); // Filtering has a delay
// Click away from the column menu to hide it
ST.component('grid-filtering header')
.click();
});
it('should find the grid and get the row count', function() {
ST.grid('grid-filtering')
.execute(function(grid) {
// This function inside of ".execute" runs in the context of
// the browser.
// Get the number of rows in the grid by getting the Store count
return grid.getStore().getCount();
})
.and(function(future) {
rowCount = future.data.executeResult;
});
});
it('Should check the record count', function() {
// You could check the correct number of records are being returned
// from your back end when the filter is applied
expect(rowCount).toEqual(10);
});
it('Should check the dataset', function() {
// You could check the correct records are being returned
// when your filter is applied
for (var i = 0; i < rowCount; i ++) {
// Check the content of each cell as needed
ST.grid('grid-filtering')
.rowAt(i)
.cellAt(1)
.textLike(/Inc/);
}
});
});
如何通过记录 ID 查找网格行,并展开行。
// URL: http://examples.sencha.com/extjs/latest/examples/kitchensink/?classic#row-expander-grid
describe('Row click', function() {
it('should find a row with a record id of 4 and expand the row', function() {
ST.grid('row-expander-grid')
.rowWith('id', 4)
.cellAt(0)
.click();
});
});
当使用复选框选择模型时,如何选择网格中的所有行。
// URL: http://examples.sencha.com/extjs/latest/examples/kitchensink/?classic#checkbox-selection
describe('Grid tests', function() {
it('should select all rows in the grid', function() {
// Check all rows in the grid by clicking on CheckColumn header
ST.component('grid[title="checkOnly: false"] checkcolumn')
.click();
});
});
如何与 Ext JS Toast 消息交互,并检查其文本内容。
// URL: http://examples.sencha.com/extjs/latest/examples/kitchensink/?classic#toast-view
describe('Toast messages', function() {
it('should show a toast message when button is clicked', function() {
// Clicking the button shows a toast message
ST.button('[text="Simple Toast"]')
.click();
// Reference the toast message and check its text
ST.component('toast')
.textLike(/Simple Toast/i);
});
});
如何使用 ST.table
Future API 与表格交互,通过索引查找行,并检查文本内容。
// URL: http://the-internet.herokuapp.com/tables
describe('Table tests', function() {
it('should find the correct values in the table', function() {
// Find a row by index, and check text content of a cell
ST.table('@table1')
.rowAt(1)
.cellAt(0)
.textLike('Smith');
});
});
如何引用页面中的元素,并检索/检查其某些属性。
// URL: http://the-internet.herokuapp.com/login
describe('Login form', function() {
it('should have correct attributes on the form element', function() {
// Example 1: get "action" attribute of HTML form
ST.element('@login')
.get('action')
.and(function() {
// Do something with the attribute value here
expect(this.future.data.action).toContain('/authenticate');
});
// Example 2: check "method" attribute of HTML form
ST.element('@login')
.expect('method').toBe('post');
});
});