文档帮助

术语、图标和标签

许多类在使用配置对象创建(实例化)类时都有快捷名称。快捷名称被称为 别名(如果类扩展了 Ext.Component,则称为 xtype)。别名/xtype 列在适用类的类名旁边,以供快速参考。

访问级别

框架类或其成员可以指定为 privateprotected。否则,类/成员为 publicPublicprotectedprivate 是访问描述符,用于传达类或类成员应该如何以及何时使用。

成员类型

成员语法

下面是一个示例类成员,我们可以对其进行剖析,以展示类成员的语法(在本例中是从 Ext.button.Button 类查看的 lookupComponent 方法)。

lookupComponent ( item ) : Ext.Component
protected

当原始配置对象添加到此容器时调用,无论是在初始化 items 配置期间,还是在 added 或 {@link #insert inserted} 新项目时。

此方法将传递的对象转换为实例化的子组件。

当需要对子创建应用特殊处理时,可以在子类中覆盖此方法。

参数

item :  Object

正在添加的配置对象。

返回值
Ext.Component

要添加的组件。

让我们看一下成员行的每个部分

成员标志

API 文档使用许多标志来进一步传达类成员的功能和意图。标签可以用文本标签、缩写或图标表示。

类图标

- 表示框架类

- Singleton 框架类。*有关更多信息,请参阅 singleton 标志

- 组件类型框架类(Ext JS 框架中扩展 Ext.Component 的任何类)

- 表示类、成员或指南在当前查看的版本中是新的

成员图标

- 表示 config 类型的类成员

- 表示 property 类型的类成员

- 表示 method 类型的类成员

- 表示 event 类型的类成员

- 表示 theme variable 类型的类成员

- 表示 theme mixin 类型的类成员

- 表示类、成员或指南在当前查看的版本中是新的

类成员快速导航菜单

在 API 文档页面的类名下方,是一行按钮,对应于当前类拥有的成员类型。每个按钮都显示按类型划分的成员计数(此计数会随着过滤器的应用而更新)。单击按钮将导航到该成员部分。将鼠标悬停在成员类型按钮上将显示该类型的所有成员的弹出菜单,以便快速导航。

Getter 和 Setter 方法

与类配置选项相关的 Getter 和 setter 方法将在方法部分以及 API 文档和成员类型菜单的配置部分中显示在其工作的配置下方。Getter 和 setter 方法文档将在配置行中找到,以便于参考。

历史记录栏

您的页面历史记录保存在本地存储中,并显示在顶部标题栏下方(使用可用的实际空间)。默认情况下,显示的唯一搜索结果是与您当前查看的产品/版本匹配的页面。您可以通过单击历史记录栏右侧的 按钮并选择“全部”单选选项来展开显示的内容。这将显示历史记录栏中所有产品/版本的所有最近页面。

在历史记录配置菜单中,您还将看到最近页面访问的列表。结果按“当前产品/版本”和“全部”单选选项过滤。单击 按钮将清除历史记录栏以及本地存储中保存的历史记录。

如果在历史记录配置菜单中选择“全部”,则将启用“在历史记录栏中显示产品详细信息”复选框选项。选中后,每个历史页面的产品/版本将与历史记录栏中的页面名称一起显示。将光标悬停在历史记录栏中的页面名称上也会将产品/版本显示为工具提示。

搜索和过滤器

可以使用页面顶部的搜索字段搜索 API 文档和指南。

在 API 文档页面上,还有一个过滤器输入字段,用于使用过滤器字符串过滤成员行。除了按字符串过滤外,您还可以按访问级别、继承和只读过滤类成员。这是通过使用页面顶部的复选框完成的。

API 类导航树底部的复选框过滤类列表,以包含或排除私有类。

单击空的搜索字段将显示您最近 10 次搜索,以便快速导航。

API 文档类元数据

每个 API 文档页面(JavaScript 原始类型页面除外)都有一个菜单视图,其中包含与该类相关的元数据。此元数据视图将具有以下一项或多项

展开和折叠示例及类成员

可运行的示例 (Fiddles) 默认在页面上展开。您可以使用代码块左上角的箭头单独折叠和展开示例代码块。您还可以使用页面右上角的切换按钮切换所有示例的折叠状态。切换所有状态将在页面加载之间记住。

类成员默认在页面上折叠。您可以使用成员行左侧的箭头图标或全局使用右上角的展开/折叠全部切换按钮来展开和折叠成员。

桌面与移动视图

在较窄的屏幕或浏览器上查看文档将导致针对较小外形尺寸优化的视图。桌面视图和“移动”视图之间的主要区别在于

查看类源代码

可以通过单击 API 文档页面顶部的类名来查看类源代码。可以通过单击成员行右侧的“查看源代码”链接来查看类成员的源代码。

Sencha Touch 2.4


顶部

路由、深度链接和后退按钮

Sencha Touch 完全支持历史记录和深度链接。这为您的 Web 应用程序带来了以下两个重要好处

  • 后退按钮在您的应用程序内部工作,帮助您在屏幕之间正确快速地导航,而无需刷新页面
  • 深度链接使您的用户可以将链接发送到应用程序的任何部分,并让其他人加载正确的页面

结果是应用程序感觉更符合用户对原生应用程序的期望,尤其是在完全支持内置后退按钮的 Android 设备上。

设置路由

为您的应用程序设置历史记录支持非常简单,并且围绕路由的概念展开。路由是 URL 和控制器操作之间的简单映射:每当在地址栏中检测到某种类型的 URL 时,都会自动调用相应的控制器操作。让我们看一下一个简单的控制器

Ext.define('MyApp.controller.Products', {
    extend: 'Ext.app.Controller',

    config: {
        routes: {
            'products/:id': 'showProduct'
        }
    },

    showProduct: function(id) {
        console.log('showing product ' + id);
    }
});

通过在前面的代码示例中指定 Route,每当浏览器 URL 看起来像“#products/123”时,都会通知 Main 控制器。例如,如果您的应用程序部署到 http://myapp.com,则任何看起来像 http://myapp.com/#products/123http://myapp.com/#products/456http://myapp.com/#products/abc 的 URL 都会自动导致调用 showProduct 函数。

当以这种方式调用 showProduct 函数时,它会传递从 URL 解析的“id”令牌。发生这种情况是因为我们在路由中使用了“:id” - 每当路由包含“:”字符时,它都会尝试从 URL 中提取该信息并将其传递给调用的函数。请注意,这些解析的令牌始终是字符串(因为 URL 本身始终是字符串),因此点击诸如“http://myapp.com/#products/456”之类的路由与调用 showProduct('456') 相同。

您可以指定任意数量的路由,并且您的每个路由都可以有任意数量的令牌,如下例所示

Ext.define('MyApp.controller.Products', {
    extend: 'Ext.app.Controller',

    config: {
        routes: {
            'products/:id': 'showProduct',
            'products/:id/:format': 'showProductInFormat'
        }
    },

    showProduct: function(id) {
        console.log('showing product ' + id);
    },

    showProductInFormat: function(id, format) {
        console.log('showing product ' + id + ' in ' + format + ' format');
    }
});

第二个路由接受诸如 #products/123/pdf 之类的 URL,这些 URL 路由到 showProductInFormat 函数并控制台日志“以 pdf 格式显示产品 123”。请注意,参数按照它们在路由定义中出现的顺序传递给函数。

当然,您的控制器函数可能不仅仅是将消息记录到控制台,它可以执行您的应用程序所需的任何操作 - 获取数据、更新 UI 或任何其他操作。

高级路由

默认情况下,路由中的通配符匹配任何字母和数字序列。这意味着“products/:id/edit”的路由将匹配 URL“#products/123/edit”,但不匹配“#products/a ,fd.sd/edit” - 这是因为第二个 URL 包含许多不符合条件的字母(空格、逗号、点)。

但有时我们希望路由能够匹配诸如此类的 URL,例如,如果 URL 包含文件名,我们可能希望能够将其提取到单个令牌中。为了实现这一点,我们可以将配置对象传递到我们的 Route

Ext.define('MyApp.controller.Products', {
    extend: 'Ext.app.Controller',

    config: {
        routes: {
            'file/:filename': {
                action: 'showFile',
                conditions: {
                    ':filename': "[0-9a-zA-Z\.]+"
                }
            }
        }
    },

    //opens a new window to show the file
    showFile: function(filename) {
        window.open(filename);
    }
});

在此示例中,我们没有操作字符串,而是有一个包含“action”属性的配置对象。此外,我们添加了一个 conditions 配置,该配置告诉 :filename 令牌匹配任何数字和字母序列,包括句点(“.”)。这意味着我们的路由现在将匹配诸如 http://myapp.com/#file/someFile.jpg 之类的 URL,并将“someFile.jpg”作为参数传递给控制器的 showFile 函数。

恢复状态

支持历史记录和深度链接带来的一个挑战是,您需要能够恢复应用程序的完整 UI 状态,以便使其看起来像是用户自己导航到深度链接页面。这有时可能很棘手,但这是为用户改善生活而付出的代价。

让我们以基于诸如 http://myapp.com/#products/123 之类的 URL 加载产品的简单示例为例,让我们更新上一个示例中的 Products 控制器

Ext.define('MyApp.controller.Products', {
    extend: 'Ext.app.Controller',

    config: {
        refs: {
            main: '#mainView'
        },

        routes: {
            'products/:id': 'showProduct'
        }
    },

    /**
     * Endpoint for 'products/:id' routes. Adds a product details view (xtype = productview)
     * into the main view of the app then loads the Product into the view
     *
     */
    showProduct: function(id) {
        var view = this.getMain().add({
            xtype: 'productview'
        });

        MyApp.model.Product.load(id, {
            success: function(product) {
                view.setRecord(product);
            },
            failure: function() {
                Ext.Msg.alert('Could not load Product ' + id);
            }
        });
    }
});

在此示例中,“products/:id”URL 端点导致立即将视图添加到我们应用程序的主视图(可以是 TabPanel 或其他容器)中,然后使用我们的 Product 模型 (MyApp.model.Product) 从服务器获取 Product。我们添加了一个回调,用新加载的 Product 填充产品详细信息视图。我们立即呈现 UI(而不是仅在 Product 加载后才呈现),以便我们尽快向用户提供视觉反馈。

每个应用程序在恢复深度链接视图的状态时都需要不同的逻辑。例如,Kitchen Sink 示例应用程序需要恢复其 NestedList 导航的状态,以及为给定 URL 呈现正确的视图。要查看如何在手机和平板电脑配置文件中完成此操作,请查看 Kitchen Sink 的 app/controller/phone/Main.js 和 app/controller/tablet/Main.js 文件中的 showView 函数。

跨设备配置文件共享 URL

在大多数情况下,您希望在您的 设备配置文件 之间共享完全相同的路由结构。这样,使用您的手机版本的用户可以将其当前 URL 发送给使用平板电脑的朋友,并期望他们的朋友将被带到平板电脑应用程序中的正确位置。这通常意味着最好在手机和平板电脑特定控制器的超类中定义您的路由配置

Ext.define('MyApp.controller.Products', {
    extend: 'Ext.app.Controller',

    config: {
        routes: {
            'products/:id': 'showProduct'
        }
    }
});

在您的手机特定子类中,您可以然后实现 showProduct 函数,为给定产品提供手机特定视图

Ext.define('MyApp.controller.phone.Products', {
    extend: 'MyApp.controller.Products',

    showProduct: function(id) {
        console.log('showing a phone-specific Product page for ' + id);
    }
});

在您的平板电脑特定子类中,您可以然后以类似的方式继续,这次显示平板电脑特定视图

Ext.define('MyApp.controller.tablet.Products', {
    extend: 'MyApp.controller.Products',

    showProduct: function(id) {
        console.log('showing a tablet-specific Product page for ' + id);
    }
});

此规则有一些例外,通常与链接到导航状态有关。Kitchen Sink 示例具有手机和平板电脑特定视图 - 虽然在这两种配置文件中都使用了 NestedList 进行导航,但在平板电脑上,NestedList 仅占用屏幕的左边缘,而在手机上,它会填充屏幕。为了使后退按钮在手机上按预期工作,每次用户在 NestedList 中导航时,新 URL 都会推送到历史记录中,这意味着手机特定的控制器有一个额外的路由。查看 app/controller/phone/Main.js 文件以获取此示例。

Sencha Touch 2.4