文档帮助

术语、图标和标签

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

访问级别

框架类或其成员可以指定为 private(私有的)或 protected(受保护的)。否则,类/成员为 public(公共的)。Publicprotectedprivate 是访问描述符,用于传达应如何以及何时使用类或类成员。

成员类型

成员语法

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

lookupComponent ( item ) : Ext.Component
protected

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

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

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

参数

item :  Object

正在添加的配置对象。

返回值
Ext.Component

要添加的组件。

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

成员标志

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

类图标

- 表示框架类

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

- 组件类型框架类(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) 默认在页面上展开。您可以使用代码块左上角的箭头单独折叠和展开示例代码块。您还可以使用页面右上角的切换按钮切换所有示例的折叠状态。切换所有状态将在页面加载之间记住。

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

桌面 -vs- 移动视图

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

查看类源码

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

Ext JS 7.8.0 - Classic Toolkit


顶部
指南适用于: classic

Grid 配置

Ext.grid.Panel 是 ExtJS 的核心组件之一。它是一个功能极其全面的组件,提供了一种显示、排序、分组和编辑数据的简便方法。

基本 Grid Panel

Basic Grid Panel

让我们从创建一个基本的 Ext.grid.Panel 开始。以下是启动并运行简单网格所需了解的全部内容

模型和 Store

Ext.grid.Panel 只是一个显示包含在 Ext.data.Store 中的数据的组件。Ext.data.Store 可以被认为是记录或 Ext.data.Model 实例的集合。

这种设置的好处是分离了我们的关注点。Ext.grid.Panel 仅关注数据的显示,而 Ext.data.Store 负责使用 Ext.data.proxy.Proxy 获取和保存数据。

首先,我们需要定义一个 Ext.data.Model。模型只是 字段 的集合,代表一种数据类型。让我们定义一个代表 “User”(用户) 的模型

Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: [ 'name', 'email', 'phone' ]
});

接下来,让我们创建一个包含多个 “User”(用户) 实例的 Ext.data.Store

var userStore = Ext.create('Ext.data.Store', {
    model: 'User',
    data: [
        { name: 'Lisa', email: '[email protected]', phone: '555-111-1224' },
        { name: 'Bart', email: '[email protected]', phone: '555-222-1234' },
        { name: 'Homer', email: '[email protected]', phone: '555-222-1244' },
        { name: 'Marge', email: '[email protected]', phone: '555-222-1254' }
    ]
});

为了方便起见,我们将 Ext.data.Store 配置为内联加载其数据。在实际应用程序中,您很可能将 Ext.data.Store 配置为使用 Ext.data.proxy.Proxy 从服务器加载数据。

Grid Panel

现在,我们有了一个模型,它定义了我们的数据结构。我们还将多个模型实例加载到 Ext.data.Store 中。现在我们准备使用 Ext.grid.Panel 显示数据。

在此示例中,我们将 Grid 配置为使用 renderTo 立即将 Grid 渲染到 HTML 文档中。

在许多情况下,网格将是 Ext.container.Viewport 的后代,这意味着渲染已经处理完毕。

Ext.create('Ext.grid.Panel', {
    renderTo: document.body,
    store: userStore,
    width: 400,
    height: 200,
    title: 'Application Users',
    columns: [
        {
            text: 'Name',
            width: 100,
            sortable: false,
            hideable: false,
            dataIndex: 'name'
        },
        {
            text: 'Email Address',
            width: 150,
            dataIndex: 'email',
            hidden: true
        },
        {
            text: 'Phone Number',
            flex: 1,
            dataIndex: 'phone'
        }
    ]
});

这就是全部内容。

我们刚刚创建了一个 Ext.grid.Panel,它将自身渲染到 body 元素。我们还告诉 Grid 面板从我们之前创建的 userStore 获取其数据。

最后,我们定义了 Grid 面板的列,并为它们提供了 dataIndex 属性。此 dataIndex 将模型中的字段与列关联起来。

“Name”(姓名) 列具有固定的 width(宽度)“100px”,并且禁用了 sorting(排序)hiding(隐藏)“Email Address”(电子邮件地址) 列默认隐藏(可以通过使用任何其他列标题上的菜单再次显示)。最后,“Phone Number”(电话号码)flexes(弹性伸缩) 以适应 Grid 面板总宽度的剩余部分。

有关更大的示例,请参阅 Basic Grid Example(基本网格示例)

Renderers(渲染器)

您可以使用列配置的 renderer 属性来更改数据的显示方式。renderer 是一个函数,它修改底层值并返回用于显示的新值。Ext.util.Format 中包含了一些最常见的渲染器,但您也可以编写自己的渲染器

columns: [
    {
        text: 'Birth Date',
        dataIndex: 'birthDate',
        // format the date using a named method from the ViewController
        renderer: 'renderDate',
    },
    {
        text: 'Birth Date',
        dataIndex: 'birthDate',
        // format the date using a formatter from the Ext.util.Format class
        formatter: 'date("m/d/Y")',
    },
    {
        text: 'Email Address',
        dataIndex: 'email',
        // format the email address using a custom renderer
        renderer: function(value) {
            return Ext.String.format('<a href="mailto:{0}">{1}</a>', value, value);
        }
    }
]

请参阅 Kitchen Sink 的 Basic Grid(基本网格) 以获取使用自定义渲染器的实时演示。

Navigation(导航)

根据可访问性指南,网格单元格接受焦点,焦点效果可以在主题中指定。

箭头键在两个维度上导航焦点位置。TAB 键将焦点从网格移出到下一个可聚焦元素。

这被称为 Navigable Mode(可导航模式),是网格内处理焦点的默认模式。

如果单元格内有可聚焦的元素(例如 [[Ext.grid.column.Action action columns]] 操作列),则可以使用 ENTER 或 F2 键进入 Actionable Mode(可操作模式)来访问可操作项,其中焦点导航使用 TAB 键在单元格内部进行。

下面讨论的单元格编辑是可操作模式的特例。

ESC 或 F2 退出可操作模式,焦点弹出到最近聚焦的可操作项的封装单元格。

有关详细信息,请参阅 https://www.w3.org/TR/wai-aria-practices/#grid

Selection Models(选择模型)

Grid 面板可以用于简单地显示数据。但是,通常需要与 Grid 的数据进行交互。所有 Grid 面板都有一个 Ext.selection.Model,它决定了数据的选择方式。最通用的选择模型是 Ext.grid.selection.SpreadsheetModel,它可以配置为选择单元格、行或列,并且在选择行时可以选择性地显示选择复选框。

有关示例,请参阅 Kitchen Sink 的 Spreadsheet Model(电子表格模型)

其他选择模型包括 Ext.selection.RowModel(选择整个行)和 Ext.selection.CellModel(选择单个单元格)。这些不如 SpreadsheetModel 灵活。

Grid 面板默认使用 Ext.selection.RowModel,但很容易切换到 Ext.grid.selection.SpreadsheetModel

Ext.create('Ext.grid.Panel', {
    selectionModel: 'spreadsheet',
    store: ...
});

Editing(编辑)

Grid 面板具有内置的编辑支持。让我们看一下两种主要的编辑模式 - 行编辑和单元格编辑。

Cell Editing(单元格编辑)

单元格编辑 允许您一次编辑 Grid 面板中的一个单元格中的数据。实现单元格编辑的第一步是为 Grid Panel 中应可编辑的每个 Ext.grid.column.Column 配置编辑器。这是使用 Ext.grid.column.Column#cfg-editor 配置完成的。最简单的方法是仅指定您要用作编辑器的字段的 xtype

Ext.create('Ext.grid.Panel', {
    ...
    columns: [
        {
            text: 'Email Address',
            dataIndex: 'email',
            editor: 'textfield'
       }
    ]
});

如果您需要更多地控制编辑器字段的行为,则 Ext.grid.column.Column#cfg-editor 配置也可以接受 Field 的配置对象。例如,如果我们使用 Ext.form.field.Text 并且我们想要要求一个值

columns: [
    text: 'Name',
    dataIndex: 'name',
    editor: {
        xtype: 'textfield',
        allowBlank: false
    }
[

您可以使用 “Ext.form.field.*” 包中的任何类作为编辑器字段。假设我们要编辑一个包含日期的列。我们可以使用 Ext.form.field.Date 编辑器

columns: [
    {
        text: 'Birth Date',
        dataIndex: 'birthDate',
        editor: 'datefield'
    }
]

Ext.grid.Panel 中,任何未配置 ]Ext.grid.column.Column 都将不可编辑。

现在我们已经配置了哪些列要可编辑,为了启用编辑,我们需要使用 Ext.grid.plugin.CellEditing 配置 Ext.grid.Panel

Ext.create('Ext.grid.Panel', {
    ...
    plugins: [{
        ptype: 'cellediting ',
        clicksToEdit: 1
    }]
});

这就是使用单元格编辑创建可编辑 Grid 所需的全部内容。有关工作示例,请参阅 Cell Editing(单元格编辑)

Row Editing(行编辑)

行编辑使您可以一次编辑整行,而不是逐个单元格编辑。行编辑的工作方式与单元格编辑完全相同 - 我们需要做的就是将插件类型更改为 Ext.grid.plugin.RowEditing

Ext.create('Ext.grid.Panel', {
    ...
    plugins: [{
        ptype: 'rowediting',
        clicksToEdit: 1
    }]
});

有关工作示例,请参阅 Row Editing(行编辑)

Grouping(分组)

将行组织成组很容易。首先,我们在 store 上指定 groupField 属性

Ext.create('Ext.data.Store', {
    model: 'Employee',
    data: ...,
    groupField: 'department'
});

接下来,我们配置一个带有 Ext.grid.feature.Grouping 的 Grid,它将处理以组显示行

Ext.create('Ext.grid.Panel', {
    ...
    features: [{ ftype: 'grouping' }]
});

有关实时示例,请参阅 Kitchen Sink 的 Grouping Grid Panel(分组 Grid 面板)

Paging(分页)

有时您的数据集太大,无法在一个页面上全部显示。Ext.grid.Panel 支持使用 Ext.toolbar.Paging 显示数据集中的单个页面,它使用上一个/下一个按钮加载页面。

Store Setup(Store 设置)

Ext.grid.Panel 上设置分页之前,我们必须配置 Ext.data.Store 以支持分页。在下面的示例中,我们向 Ext.data.Store 添加了 Ext.data.Store#cfg-pageSize,并且我们使用 Ext.data.reader.Reader#cfg-totalProperty 配置了 Ext.data.reader.Reader

Ext.create('Ext.data.Store', {
    model: 'User',
    autoLoad: true,
    pageSize: 100,
    proxy: {
        type: 'ajax',
        url : 'data/users.json',
        reader: {
            type: 'json',
            rootProperty: 'users',
            totalProperty: 'total'
        }
    }
});

Ext.data.reader.Reader#totalProperty 配置告诉 Ext.data.reader.Json 从 JSON 响应中的哪里获取结果总数。此 Ext.data.Store 配置为使用如下所示的 JSON 响应

{
    "success": true,
    "total": 4,
    "users": [
        { "name": "Lisa", "email": "[email protected]", "phone": "555-111-1224" },
        { "name": "Bart", "email": "[email protected]", "phone": "555-222-1234" },
        { "name": "Homer", "email": "[email protected]", "phone": "555-222-1244" },
        { "name": "Marge", "email": "[email protected]", "phone": "555-222-1254" }
    ]
}

分页工具栏

现在我们已经设置了 Ext.data.Store 以支持分页,剩下的就是配置 Ext.toolbar.Paging。您可以将 Ext.toolbar.Paging 放在应用程序布局中的任何位置,但通常它会停靠在 Ext.grid.Panel 上。

Ext.create('Ext.grid.Panel', {
    store: userStore,
    columns: ...,
    dockedItems: [{
        xtype: 'pagingtoolbar',
        store: userStore,   // same store GridPanel is using
        dock: 'bottom',
        displayInfo: true
    }]
});

请参阅 分页表格 (Paging Grid) 以获取工作示例。

缓冲渲染

表格 (Grids) 和树 (Trees) 启用了超大数据集的缓冲渲染,作为使用分页工具栏的替代方案。您的用户可以滚动浏览数千条记录,而不会因一次渲染屏幕上的所有记录而导致性能下降。

仅渲染足够的行以填充表格的可见区域,并在任一侧留有少量的 Ext.grid.Panel#cfg-leadingBufferZone 溢出区,以允许滚动。随着滚动的进行,新行在滚动方向上渲染,而表格后退侧的行将被删除。

默认情况下,表格使用缓冲渲染,因此您不再需要将插件添加到您的表格组件。

请参阅 大数据 (Big Data)过滤树 (Filtered Tree) 以获取工作示例。

嵌入式组件。

自 ExtJS 5.0 以来,开发人员已经能够使用 Widget Column 类在表格单元格中嵌入组件。

在 6.2.0 之前的版本中,以这种方式嵌入的组件无法访问表格的 Ext.app.ViewModel。由列的 dataIndex 引用的字段绑定到组件的 defaultBindProperty

在 6.2.0 中,嵌入在表格中的组件可以访问 ViewModel 以及其中的所有数据。ViewModel 包含两个特定于行的属性

record
recordIndex

自 ExtJS 6.2.0 以来,开发人员已经能够配置组件以显示在数据行下方(或可配置地,上方)的扩展行中。

嵌入式组件可以访问表格的 ViewModel。

有关更多详细信息,请参阅 在表格中使用组件 (Using Components in Grids) 指南。

Ext JS 7.8.0 - Classic Toolkit