许多类在使用配置对象创建(实例化)类时使用快捷名称。快捷名称称为别名
(如果类扩展 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
)。备用类名通常出于向后兼容性的目的而保留。默认情况下,可运行示例(Fiddle)在页面上展开。您可以使用代码块左上角的箭头单独折叠和展开示例代码块。您还可以使用页面右上角的切换按钮切换所有示例的折叠状态。切换所有状态将在页面加载之间记住。
默认情况下,类成员在页面上折叠。您可以使用成员行左侧的箭头图标或全局使用右上角的展开/折叠全部切换按钮展开和折叠成员。
在较窄的屏幕或浏览器上查看文档将导致针对较小尺寸优化视图。台式机和“移动”视图之间的主要区别是
可以通过单击 API 文档页面顶部的类名来查看类源。可以通过单击成员行右侧的“查看源”链接来查看类成员的源。
您在 Sencha Touch 中交互的大多数可视类都是组件。Sencha Touch 中的每个组件都是 Ext.Component 的子类,这意味着所有组件都可以
组件还具有更高级的行为,使它们能够
您创建的每个组件都具有所有先前提到的功能,并且应用程序由许多组件组成,通常彼此嵌套。容器类似于组件,但除了先前列出的功能之外,它们还允许您在其中呈现和排列子组件。大多数应用程序都有一个称为视口的顶级容器,它占据整个屏幕。视口中包含子组件,例如,在邮件应用程序中,视口容器的两个子组件可以是消息列表和电子邮件预览窗格。
容器提供以下附加功能
布局确定容器的子组件在屏幕上的布局方式。在我们的邮件应用程序示例中,我们使用了 HBox 布局,它使我们能够将电子邮件列表固定在屏幕的左侧边缘,并允许预览窗格占据其余部分。Sencha Touch 中提供了多种布局,每种布局都可以帮助您实现所需的应用程序结构,如布局指南中所述。
组件的创建方式与 Sencha Touch 中所有其他类的创建方式相同 - 使用 Ext.create 方法调用。以下代码示例说明了面板的创建
var panel = Ext.create('Ext.Panel', {
html: 'This is my panel'
});
这将创建一个面板实例,并配置一些基本 HTML 内容。面板是一个简单的组件,可以呈现 HTML,并且还包含其他项目。在前面的示例中,我们创建了一个面板实例,但它不会立即显示在屏幕上,因为项目在实例化后不会立即呈现。这允许我们在呈现和布局之前创建一些组件并四处移动它们,这比在呈现后移动它们要快得多。
要将此面板显示在屏幕上,我们只需将其添加到全局视口中
Ext.Viewport.add(panel);
面板也是容器,这意味着它们可以包含其他组件,并由布局排列。让我们重新审视前面的示例,这次创建一个带有两个子组件和 hbox 布局的面板
这次我们创建了三个面板 - 第一个面板的创建方式与之前一样,但内部两个面板使用 xtype 内联声明。Xtype 是一种创建组件的便捷方式,无需经历使用 Ext.create 和指定完整类名的过程,而是可以在对象中提供类的 xtype,框架会创建组件。
我们还为顶级面板指定了一个布局 - 在这种情况下,hbox 根据每个子项的“flex”参数拆分父面板的水平宽度。例如,如果上面的父面板宽 300px,则第一个子项将被弯曲到 100px 宽,第二个子项将被弯曲到 200px,因为第一个子项被赋予 flex: 1,第二个子项被赋予 flex: 2。
每当您创建新组件时,都可以向其传递配置选项。给定组件的所有配置都列在其类文档页面的“配置选项”部分中。在实例化组件时,您可以传入任意数量的配置选项,并在以后的任何时间修改其中任何一个选项。例如,您可以在创建面板后轻松修改其html 内容,如下例所示
每个配置都有一个 getter 方法和一个 setter 方法 - 这些方法会自动生成,并且始终遵循相同的模式。例如,名为“html”的配置自动接收 getHtml 和 setHtml 方法,而名为 defaultType 的配置接收 getDefaultType 和 setDefaultType 方法,依此类推。
Xtype 是一种创建组件的简单方法,无需使用完整的类名。这在创建包含子组件的 容器 时特别有用。Xtype 只是指定组件的简写方式,例如,你可以使用 xtype: 'panel',而不是键入 Ext.Panel。
以下说明了 xtype 的用法
这是 Sencha Touch 中所有可用 xtype 的列表
xtype Class ----------------- --------------------- actionsheet Ext.ActionSheet audio Ext.Audio button Ext.Button component Ext.Component container Ext.Container image Ext.Img label Ext.Label loadmask Ext.LoadMask map Ext.Map mask Ext.Mask media Ext.Media panel Ext.Panel segmentedbutton Ext.SegmentedButton sheet Ext.Sheet spacer Ext.Spacer title Ext.Title titlebar Ext.TitleBar toolbar Ext.Toolbar video Ext.Video carousel Ext.carousel.Carousel carouselindicator Ext.carousel.Indicator navigationview Ext.navigation.View datepicker Ext.picker.Date picker Ext.picker.Picker pickerslot Ext.picker.Slot slider Ext.slider.Slider thumb Ext.slider.Thumb tabbar Ext.tab.Bar tabpanel Ext.tab.Panel tab Ext.tab.Tab viewport Ext.viewport.Default DataView Components --------------------------------------------- dataview Ext.dataview.DataView list Ext.dataview.List listitemheader Ext.dataview.ListItemHeader nestedlist Ext.dataview.NestedList dataitem Ext.dataview.component.DataItem Form Components --------------------------------------------- checkboxfield Ext.field.Checkbox datepickerfield Ext.field.DatePicker emailfield Ext.field.Email field Ext.field.Field hiddenfield Ext.field.Hidden input Ext.field.Input numberfield Ext.field.Number passwordfield Ext.field.Password radiofield Ext.field.Radio searchfield Ext.field.Search selectfield Ext.field.Select sliderfield Ext.field.Slider spinnerfield Ext.field.Spinner textfield Ext.field.Text textareafield Ext.field.TextArea textareainput Ext.field.TextAreaInput togglefield Ext.field.Toggle urlfield Ext.field.Url fieldset Ext.form.FieldSet formpanel Ext.form.Panel
如前所述,容器是可以通过布局排列子组件的特殊组件。前面的代码示例展示了如何创建面板,其中已在内部定义了两个子面板,但也可以在运行时完成此操作
在此示例中,我们总共创建了三个面板。首先,我们创建了 aboutPanel,我们可以用它来告诉用户一些有关应用程序的信息。然后,我们创建了另一个名为 mainPanel 的面板,它已经在其 items 配置中包含了一个第三个面板,其中包含一些占位符文本(“First Panel”)。最后,我们通过调用 mainPanel 上的 add 方法将第一个面板添加到第二个面板。
在此情况下,我们为 mainPanel 提供了另一个 hbox 布局,但我们还引入了一些 defaults。这些应用于面板中的每个项目,因此在此情况下,mainPanel 中的每个子项都将获得 flex: 1 配置。这样做的效果是,当我们首次渲染屏幕时,mainPanel 中只存在一个子项,因此该子项占据了其可用的全部宽度。但是,一旦调用了 mainPanel.add 行,aboutPanel 就会在其中渲染,并赋予 flex 为 1,这会导致它和第一个面板都接收 mainPanel 的全部宽度的一半。
同样,使用诸如以下方法调用之类的操作从容器中删除项目也很容易
mainPanel.remove(aboutPanel);
运行此行后,应用程序将恢复到其先前状态,第一个子面板再次占据 mainPanel 中的全部宽度。
Sencha Touch 中的每个组件都可以通过简单的 API 调用显示或隐藏。基于前面的 mainPanel 示例,以下是我们如何隐藏它的方法
mainPanel.hide();
这将隐藏 mainPanel 本身及其内部的任何子组件。显示组件再次变得非常容易
mainPanel.show();
同样,这会恢复 mainPanel 及其内部任何子组件的可见性。
所有组件都会触发事件,你可以监听这些事件并采取相应操作。例如,每当输入 文本字段 时,都会触发其“change”事件。你可以使用 listeners 配置监听该事件,如下例所示
Ext.create('Ext.form.Text', {
label: 'Name',
listeners: {
change: function(field, newValue, oldValue) {
myStore.filter('name', newValue);
}
}
});
每当文本字段的值更改时,都会触发“change”事件并调用指定的侦听器函数。在此情况下,我们根据输入的名称过滤了 存储,但我们可以在那里提供任何其他函数。
Sencha Touch 组件会触发许多事件,让你可以轻松地连接到应用程序行为的大多数方面。它们还可以在创建组件后指定。
例如,假设你有一个仪表板用于轮询实时更新,并且当仪表板不可见时,你不希望它执行轮询,那么你可以连接到仪表板的 show 和 hide 事件
dashboard.on({
hide: MyApp.stopPolling,
show: MyApp.startPolling
});
将此类行为应用于整个应用程序非常容易,在这种情况下可以延长电池寿命。触发的其他有用事件如下
每个组件在其类文档中列出了它触发的事件的说明。
Sencha Touch 能够在其他容器内对接组件。例如,假设我们使用hbox 布局,并且希望在顶部放置一个横幅,我们可以使用对接,它提供了一种无需将容器嵌套在彼此内部即可实现此目的的方法
布局指南对对接和所有其他布局选项进行了全面讨论。
由于大多数移动设备的内存有限,因此在不再需要组件时销毁它们通常是个好主意。虽然在创建应用程序时这不是首要考虑的事项,但当您将应用程序推向生产时,它仍然是优化用户体验的好方法。销毁组件是使用代码完成的,如下例所示
mainPanel.destroy();
这会从 DOM 中移除 mainPanel,还会移除它在特定 DOM 元素上设置的任何事件侦听器。它还会销毁面板内部使用的任何实例,并对其所有子组件调用 destroy 方法。在组件被销毁后,其所有子组件也不再可用,组件不再位于 DOM 中,对它的任何引用都将不再有效。