许多类在使用配置对象创建(实例化)类时都有快捷名称。快捷名称被称为 alias
(如果类扩展了 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 方法调用成功,方法可能返回 Component,如果失败,则返回 false
,这将显示为 Ext.Component/Boolean
)。PROTECTED
- 请参阅下面的标志部分)Ext.container.Container
)。如果成员源自当前类,则源类将显示为蓝色链接;如果它从祖先类或混入类继承,则显示为灰色。view source
)item : Object
)。undefined
之外的值,则“返回值”部分将注释返回的类或对象类型以及描述(示例中为 Ext.Component
)Available since 3.4.0
- 示例中未显示),就在成员描述之后Defaults to: false
)API 文档使用许多标志来进一步传达类成员的功能和意图。标签可以用文本标签、缩写或图标表示。
classInstance.method1().method2().etc();
false
,则标记为可阻止的事件将不会触发- 表示框架类
- Singleton 框架类。*有关更多信息,请参阅 singleton 标志
- 组件类型的框架类(Ext JS 框架中扩展 Ext.Component 的任何类)
- 表示类、成员或指南是当前查看版本中的新内容
- 表示 config
类型的类成员
- 表示 property
类型的类成员
- 表示 method
类型的类成员
- 表示 event
类型的类成员
- 表示 theme variable
类型的类成员
- 表示 theme mixin
类型的类成员
- 表示类、成员或指南是当前查看版本中的新内容
在 API 文档页面上的类名正下方是一行按钮,对应于当前类拥有的成员类型。每个按钮都显示按类型划分的成员计数(此计数会随着应用过滤器而更新)。单击按钮将导航到该成员部分。将鼠标悬停在成员类型按钮上将显示该类型的所有成员的弹出菜单,以便快速导航。
与类配置选项相关的 Getting 和 setter 方法将在方法部分以及 API 文档和成员类型菜单的配置部分中显示,就在它们所使用的配置下方。getter 和 setter 方法文档将在配置行中找到,以便于参考。
您的页面历史记录保存在本地存储中,并在顶部标题栏正下方显示(使用可用的实际空间)。默认情况下,显示的唯一搜索结果是与您当前查看的产品/版本匹配的页面。您可以通过单击历史记录栏右侧的 按钮并选择“全部”单选按钮来扩展显示的内容。这将显示所有产品/版本历史记录栏中的所有最近页面。
在历史记录配置菜单中,您还将看到最近页面访问的列表。结果按“当前产品/版本”和“全部”单选按钮过滤。单击 按钮将清除历史记录栏以及本地存储中保存的历史记录。
如果在历史记录配置菜单中选择了“全部”,“在历史记录栏中显示产品详细信息”的复选框选项将启用。选中后,每个历史页面的产品/版本将与历史记录栏中的页面名称一起显示。将光标悬停在历史记录栏中的页面名称上也会将产品/版本显示为工具提示。
可以使用页面顶部的搜索字段搜索 API 文档和指南。
在 API 文档页面上,还有一个过滤器输入字段,该字段使用过滤器字符串过滤成员行。除了按字符串过滤外,您还可以按访问级别、继承和只读过滤类成员。这是通过使用页面顶部的复选框完成的。
API 类导航树底部的复选框过滤类列表以包含或排除私有类。
单击空的搜索字段将显示您最近 10 次搜索,以便快速导航。
每个 API 文档页面(Javascript 原始页面除外)都有一个与该类相关的元数据菜单视图。此元数据视图将具有以下一项或多项
Ext.button.Button
类具有 Ext.Button
的备用类名称)。备用类名称通常为了向后兼容性而维护。可运行的示例 (Fiddles) 默认在页面上展开。您可以使用代码块左上角的箭头单独折叠和展开示例代码块。您还可以使用页面右上角的切换按钮切换所有示例的折叠状态。切换所有状态将在页面加载之间记住。
类成员默认在页面上折叠。您可以使用成员行左侧的箭头图标或全局使用右上角的展开/折叠所有切换按钮来展开和折叠成员。
在较窄的屏幕或浏览器上查看文档将导致针对较小外形尺寸优化的视图。桌面和“移动”视图之间的主要区别在于
可以通过单击 API 文档页面顶部的类名来查看类源代码。可以通过单击成员行右侧的“查看源代码”链接来查看类成员的源代码。
Cmd 6.5+ 帮助您将任何 Ext JS 应用程序转变为渐进式 Web 应用。
渐进式 Web 应用使用现代 Web 技术提供原生应用程序体验。Google 提供了对渐进式 Web 应用的精彩介绍:您的第一个渐进式 Web 应用
Cmd 专门允许开发人员
显示应用程序横幅,邀请 Android 用户将应用程序安装到他们的主屏幕。
通过基于 service-worker 的缓存为支持此功能的浏览器提供离线支持。
注意: 您必须首先在本地安装 Node JS 才能使用 Cmd 渐进式 Web 应用集成。
使用渐进式 Web 应用功能需要 Node JS 6+
要向您的应用程序添加“添加到主屏幕”横幅,请将 progressive 配置对象添加到您的 app.json。progressive 配置对象有两个项目:manifest 和 serviceWorker。manifest 配置包含 web app manifest 的数据。一旦此配置到位,Cmd 会在构建时自动将必需的 <link rel=”manifest”/>
标记添加到您应用程序的 index.html
文件中。
web app manifest 的存在并不一定意味着受支持的浏览器会立即显示添加到主屏幕横幅。例如,Chrome 使用一组标准,包括 service worker 的使用、SSL 状态和访问频率启发式方法来确定何时 显示横幅。
示例
"progressive": {
"manifest": {
"name": "My App",
"short_name": "My App",
"icons": [{
"src": "resources/icon-small.png",
"sizes": "96x96"
}, {
"src": "resources/icon-medium.png",
"sizes": "192x192"
}, {
"src": "resources/icon-large.png",
"sizes": "256x256"
}],
"theme_color": "#054059",
"background_color": "#054059",
"display": "standalone",
"orientation": "portrait",
"start_url": "/index.html"
}
}
注意:sw-precache 的使用已被弃用,转而使用 Workbox。Sencha Cmd 将在即将发布的版本中支持 Workbox。
渐进式 Web 应用最重要的功能也许是提供离线功能。通常,这是通过缓存应用程序 shell(显示您的应用程序所需的 HTML、JavaScript、CSS、字体和图像资源)以及内容来完成的,这些内容通常通过 AJAX 调用 REST API 来检索。
渐进式 Web 应用使用 service workers 来提供缓存。当“progressive”配置存在于您的 app.json
中时,Cmd 会在构建时使用 sw-precache 创建一个 service worker,该 service worker 会自动缓存应用程序 shell。您还可以通过在您的代码中添加 @sw-cache 注释来让 service worker 缓存 AJAX 请求。
想象一下一家商店,它从服务器检索即将发生的事件列表。我们可以让 Cmd 生成的 service worker 缓存 API 调用,以便在离线时结果可用,方法是将 @sw-cache
注释添加到 url
Ext.define('App.store.UpcomingEvents', {
extend: 'Ext.data.Store',
proxy: {
type: 'ajax',
// @sw-cache
url: '/api/upcoming-events.json',
reader: {
type: 'json'
}
}
});
@sw-cache
注释可以放在任何字符串或对象属性之上。它所附加到的字符串应该是要缓存的 url。当 url 是动态的时(例如,它在路径或查询字符串中包含 id),您可以选择指定“urlPattern”配置来控制缓存哪些请求。例如,想象一下针对特定事件的 AJAX 请求
Ext.define('App.model.Event', {
extend: 'Ext.data.Model',
fields: ['id', 'name', 'date'],
proxy: {
type: 'rest',
// @sw-cache { urlPattern: "\\/api\\/events\\/\\d+" }
url : '/events'
}
});
@sw-cache
注释接受许多选项
urlPattern:一个正则表达式,当匹配时,会导致响应被缓存
handler:默认为“networkFirst”。可以是以下之一
networkFirst 尝试通过从网络获取来处理请求。如果成功,将响应存储在缓存中。否则,尝试从缓存中满足请求。这是用于基本直读式缓存的策略。它也适用于 API 请求,在 API 请求中,您始终希望在可用时获得最新鲜的数据,但宁愿拥有陈旧的数据也不愿没有数据。
cacheFirst 如果请求与缓存条目匹配,则使用该条目进行响应。否则,尝试从网络获取资源。如果网络请求成功,则更新缓存。此选项适用于不更改或具有某些其他更新机制的资源。
fastest 并行地从缓存和网络请求资源。使用首先返回的任何一个进行响应。通常,这将是缓存版本(如果存在)。一方面,即使资源被缓存,此策略也将始终发出网络请求。另一方面,如果/当网络请求完成时,缓存将被更新,以便将来的缓存读取将是最新的。
cacheOnly 从缓存中解析请求,否则失败。当您需要保证不会发出网络请求时,此选项非常有用,例如在移动设备上节省电池电量。
networkOnly 尝试从网络获取 URL 来处理请求。如果获取失败,则请求失败。本质上,与根本不为 URL 创建路由相同。
options:具有以下属性的对象
debug [Boolean] 确定是否将额外信息记录到浏览器的控制台。
networkTimeoutSeconds [Number] 应用于 toolbox.networkFirst 内置处理程序的超时。如果设置了 networkTimeoutSeconds
,则任何花费的时间超过该时间的网络请求都将自动回退到缓存的响应(如果存在)。当未设置 networkTimeoutSeconds 时,将应用浏览器的本机网络超时逻辑。
cache [Object]
cache.maxEntries
结合使用。如果我们只想缓存最近访问的十个即将发生的事件,我们可以通过添加
options: { cache: { name: ‘events’, maxEntries: 10 } }
到我们的 @sw-cache 注释
来实现这一点。例如
Ext.define('App.model.Event', {
extend: 'Ext.data.Model',
fields: ['id', 'name', 'date'],
proxy: {
type: 'rest',
// @sw-cache { urlPattern: "\\/api\\/events\\/\\d+", options: { cache: { name: 'events', maxEntries: 10 } } }
url : '/events'
}
});
注意: 在添加 @sw-cache
注释或更改 app.json
后,您需要运行“sencha app build”来测试您的更改。service-worker 仅包含在您应用程序的生产版本中。这是因为开发版本将每个代码文件作为单独的请求加载,因此在运行开发版本时,不可能预缓存应用程序 shell 所需的所有资源。请务必使用生产版本来测试缓存行为。
注意: 构建完成后,应用程序的首次重新加载将拾取对 progressive manifest 和缓存的更改。由于 service-worker 是在您在浏览器中重新加载应用程序时异步获取和安装的,因此它可能最初不会缓存在您的应用程序启动时发出的 API 调用。您可能需要第二次重新加载您的浏览器才能缓存启动期间发出的 API 调用。
除了 @sw-cache
注释之外,您还可以通过将 runtimeCaching
属性添加到 app.json 中的 progressive.serviceWorker 部分来配置 service worker 缓存请求。支持上面描述的所有选项。
因此,例如,要缓存即将发生的事件列表以及最近查看的十个事件的数据,您可以将以下内容添加到您的 app.json 中,而不是将 @sw-cache
注释添加到您的 store 和 model 类中。
这是一个包含 manifest 和 serviceWorker 配置的完整示例。
"progressive": {
"manifest": {
"name": "My App",
"short_name": "My App",
"icons": [{
"src": "resources/icon-small.png",
"sizes": "96x96"
}, {
"src": "resources/icon-medium.png",
"sizes": "192x192"
}, {
"src": "resources/icon-large.png",
"sizes": "256x256"
}],
"theme_color": "#054059",
"background_color": "#054059",
"display": "standalone",
"orientation": "portrait",
"start_url": "/index.html"
},
"serviceWorker": {
"runtimeCaching": [
{
"urlPattern": "\\/api\\/events"
},
{
"urlPattern": "\\/api\\/events\\/\d+",
"options": {
"cache": {
"name": "events",
"maxEntries": 10
}
}
}
]
}
}
注意:虽然您可以使用 app.json
中的 runtimeCaching 配置和 @sw-cache
注释来指定缓存行为,但 @sw-cache
注释将优先。因此,我们建议为您的应用程序选择一种方法,而不是混合使用两种方法。