使用FlexiGrid实现Extjs表格效果方法分享

使用FlexiGrid实现Extjs表格效果方法分享

概述

FlexiGrid是一种基于jQuery的表格插件,能够快速地帮助我们创建灵活、可定制的表格。在ExtJS中,我们可以使用该插件来实现表格的显示和操作,使得我们能够更加高效、方便地开发我们的ExtJS应用。

本文将介绍如何使用FlexiGrid实现ExtJS表格效果,并提供两条示例说明。

步骤

步骤1:引入jQuery和FlexiGrid插件

首先需要在我们的项目中引入jQuery和FlexiGrid插件。那么如何在ExtJS中引入jQuery呢?答案是通过在index.html文件中引入jQuery:

<!-- 引入 jQuery -->
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>

然后在我们的ExtJS代码中引入FlexiGrid插件:

<!-- 引入 FlexiGrid 插件 -->
<script type="text/javascript" src="https://cdn.bootcss.com/flexigrid/1.1/js/flexigrid.js"></script>
<link rel="stylesheet" href="https://cdn.bootcss.com/flexigrid/1.1/css/flexigrid.css" />

步骤2:创建表格

在ExtJS中,我们通常使用GridPanel来创建表格。为了使用FlexiGrid,我们可以通过配置项的方式来进行设置,如下所示:

Ext.create('Ext.grid.Panel', {
    title: 'FlexiGrid Demo',
    store: Ext.create('Ext.data.Store', {
        fields: ['name', 'email', 'phone'],
        data: [
            { name: 'Lisa', email: 'lisa@simpsons.com', phone: '555-111-1224' },
            { name: 'Bart', email: 'bart@simpsons.com', phone: '555-222-1234' },
            { name: 'Homer', email: 'homer@simpsons.com', phone: '555-222-1244' },
            { name: 'Marge', email: 'marge@simpsons.com', phone: '555-222-1254' }
        ]
    }),
    columns: [
        { text: 'Name', dataIndex: 'name' },
        { text: 'Email', dataIndex: 'email', flex: 1 },
        { text: 'Phone', dataIndex: 'phone' }
    ],
    width: 500,
    height: 250,
    renderTo: Ext.getBody()
});

通过以上配置,我们就可以创建出一个简单的表格。但是,这个表格并不是使用FlexiGrid插件创建的,还需要我们进行下一步的设置。

步骤3:设置FlexiGrid选项

在创建GridPanel时,我们可以通过viewConfig配置项来设置FlexiGrid选项,如下所示:

Ext.create('Ext.grid.Panel', {
    title: 'FlexiGrid Demo',
    store: Ext.create('Ext.data.Store', {
        fields: ['name', 'email', 'phone'],
        data: [
            { name: 'Lisa', email: 'lisa@simpsons.com', phone: '555-111-1224' },
            { name: 'Bart', email: 'bart@simpsons.com', phone: '555-222-1234' },
            { name: 'Homer', email: 'homer@simpsons.com', phone: '555-222-1244' },
            { name: 'Marge', email: 'marge@simpsons.com', phone: '555-222-1254' }
        ]
    }),
    columns: [
        { text: 'Name', dataIndex: 'name' },
        { text: 'Email', dataIndex: 'email', flex: 1 },
        { text: 'Phone', dataIndex: 'phone' }
    ],
    width: 500,
    height: 250,
    renderTo: Ext.getBody(),
    viewConfig: {
        plugins: [
            {
                ptype: 'gridviewdragdrop'
            },
            {
                ptype: 'gridviewoptions',
                enableTooltip: true,
                optionText: 'Columns'
            }
        ],
        itemTpl: null,
        scrollOffset: 0,
        autoFill: true,
        forceFit: true,
        stripeRows: true,
        showPager: true,
        useRp: true,
        rp: 10,
        rpOptions: [5, 10, 20, 30, 50],
        title: false,
        resizable: false,
        sortOrder: "asc",
        resizable: true,
        resizableWidthIncrement: 10,
        resizableHeightIncrement: 10,
        minWidth: 50,
        minHeight: 50,
        maxWidth: null,
        maxHeight: null
    }
});

在上述配置中,我们设置了以下FlexiGrid的选项:

  • plugins:设置了两个插件:gridviewdragdropgridviewoptions
  • itemTpl:设置项的模板,这里设置为null
  • scrollOffset:滚动条的偏移量。
  • autoFill:自动填充。
  • forceFit:强制适应父容器大小。
  • stripeRows:是否显示条纹行。
  • showPager:是否显示分页工具栏。
  • useRp:是否使用固定的行数分页。
  • rp:每页显示的行数。
  • rpOptions:可选的每页行数。
  • title:是否显示表格标题。
  • sortOrder:默认排序的顺序。
  • resizable:是否可调整大小。
  • resizableWidthIncrement:宽度可调整的增量。
  • resizableHeightIncrement:高度可调整的增量。
  • minWidth:最小宽度。
  • minHeight:最小高度。
  • maxWidth:最大宽度。
  • maxHeight:最大高度。

步骤4:完整代码示例

Ext.create('Ext.grid.Panel', {
    title: 'FlexiGrid Demo',
    store: Ext.create('Ext.data.Store', {
        fields: ['name', 'email', 'phone'],
        data: [
            { name: 'Lisa', email: 'lisa@simpsons.com', phone: '555-111-1224' },
            { name: 'Bart', email: 'bart@simpsons.com', phone: '555-222-1234' },
            { name: 'Homer', email: 'homer@simpsons.com', phone: '555-222-1244' },
            { name: 'Marge', email: 'marge@simpsons.com', phone: '555-222-1254' }
        ]
    }),
    columns: [
        { text: 'Name', dataIndex: 'name' },
        { text: 'Email', dataIndex: 'email', flex: 1 },
        { text: 'Phone', dataIndex: 'phone' }
    ],
    width: 500,
    height: 250,
    renderTo: Ext.getBody(),
    viewConfig: {
        plugins: [
            {
                ptype: 'gridviewdragdrop'
            },
            {
                ptype: 'gridviewoptions',
                enableTooltip: true,
                optionText: 'Columns'
            }
        ],
        itemTpl: null,
        scrollOffset: 0,
        autoFill: true,
        forceFit: true,
        stripeRows: true,
        showPager: true,
        useRp: true,
        rp: 10,
        rpOptions: [5, 10, 20, 30, 50],
        title: false,
        resizable: true,
        resizableWidthIncrement: 10,
        resizableHeightIncrement: 10,
        minWidth: 50,
        minHeight: 50,
        maxWidth: null,
        maxHeight: null
    }
});

示例

示例1:支持排序和过滤的FlexiGrid表格

下面是一个示例,演示如何使用FlexiGrid实现排序和过滤功能的表格。

Ext.create('Ext.grid.Panel', {
    title: 'Sortable and Filterable FlexiGrid Demo',
    store: Ext.create('Ext.data.Store', {
        fields: ['name', 'email', 'phone'],
        data: [
            { name: 'Lisa', email: 'lisa@simpsons.com', phone: '555-111-1224' },
            { name: 'Bart', email: 'bart@simpsons.com', phone: '555-222-1234' },
            { name: 'Homer', email: 'homer@simpsons.com', phone: '555-222-1244' },
            { name: 'Marge', email: 'marge@simpsons.com', phone: '555-222-1254' }
        ]
    }),
    columns: [
        { text: 'Name', dataIndex: 'name', sortable: true },
        { text: 'Email', dataIndex: 'email', flex: 1, sortable: true },
        { text: 'Phone', dataIndex: 'phone', sortable: true }
    ],
    width: 500,
    height: 250,
    renderTo: Ext.getBody(),
    viewConfig: {
        plugins: [
            {
                ptype: 'gridviewdragdrop'
            },
            {
                ptype: 'gridviewoptions',
                enableTooltip: true,
                optionText: 'Columns'
            }
        ],
        itemTpl: null,
        scrollOffset: 0,
        autoFill: true,
        forceFit: true,
        stripeRows: true,
        showPager: true,
        useRp: true,
        rp: 10,
        rpOptions: [5, 10, 20, 30, 50],
        title: false,
        resizable: true,
        resizableWidthIncrement: 10,
        resizableHeightIncrement: 10,
        minWidth: 50,
        minHeight: 50,
        maxWidth: null,
        maxHeight: null,
        remoteSort: true,
        remoteFilter: true
    }
});

在这个示例中,我们设置了sortable选项来支持排序,同时设置了remoteSort选项来实现远程排序。我们还设置了remoteFilter选项来实现远程过滤。

示例2:支持编辑、添加和删除的FlexiGrid表格

下面是一个示例,演示如何使用FlexiGrid实现编辑、添加和删除功能的表格。

var store = Ext.create('Ext.data.Store', {
    fields: ['name', 'email', 'phone'],
    data: [
        { name: 'Lisa', email: 'lisa@simpsons.com', phone: '555-111-1224' },
        { name: 'Bart', email: 'bart@simpsons.com', phone: '555-222-1234' },
        { name: 'Homer', email: 'homer@simpsons.com', phone: '555-222-1244' },
        { name: 'Marge', email: 'marge@simpsons.com', phone: '555-222-1254' }
    ]
});

var grid = Ext.create('Ext.grid.Panel', {
    title: 'Editable FlexiGrid Demo',
    store: store,
    columns: [
        { text: 'Name', dataIndex: 'name', editor: 'textfield' },
        { text: 'Email', dataIndex: 'email', flex: 1, editor: 'textfield' },
        { text: 'Phone', dataIndex: 'phone', editor: 'textfield' }
    ],
    width: 500,
    height: 250,
    renderTo: Ext.getBody(),
    viewConfig: {
        plugins: [
            {
                ptype: 'gridviewdragdrop'
            },
            {
                ptype: 'gridviewoptions',
                enableTooltip: true,
                optionText: 'Columns'
            }
        ],
        itemTpl: null,
        scrollOffset: 0,
        autoFill: true,
        forceFit: true,
        stripeRows: true,
        showPager: true,
        useRp: true,
        rp: 10,
        rpOptions: [5, 10, 20, 30, 50],
        title: false,
        resizable: true,
        resizableWidthIncrement: 10,
        resizableHeightIncrement: 10,
        minWidth: 50,
        minHeight: 50,
        maxWidth: null,
        maxHeight: null,
        plugins: [
            {
                ptype: 'cellediting',
                clicksToEdit: 2
            }
        ]
    },
    tbar: [
        {
            text: 'Add New Row',
            handler: function() {
                var rec = new store.model();
                grid.store.insert(0, rec);
                grid.plugin.startEdit(rec, 0);
            }
        },
        {
            text: 'Remove Selected Row',
            handler: function() {
                var selection = grid.getView().getSelectionModel().getSelection()[0];
                if (selection) {
                    grid.store.remove(selection);
                }
            }
        }
    ]
});

在这个示例中,我们通过设置editor选项来支持编辑功能。同时,我们添加了一个Tbar,通过按钮的方式来实现添加和删除功能。

结论

本文介绍了如何使用FlexiGrid来实现ExtJS表格效果,并提供了两个示例。使用FlexiGrid可以让我们更加灵活、高效地开发ExtJS应用。希望本文对读者能够有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用FlexiGrid实现Extjs表格效果方法分享 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • jQWidgets jqxMenu closeItem()方法

    以下是关于 jQWidgets jqxMenu 组件中 closeItem() 方法的详细攻略。 jQWidgets jqxMenu closeItem() 方法 jWidgets jqxMenu 组件的 closeItem() 方法用于关闭指定的菜单项。该方法接受一个参数即要关闭的菜单项的 ID 或索引。 语法 $(‘#menu’).jqxMenu(‘cl…

    jquery 2023年5月12日
    00
  • 如何使用jQuery Mobile创建一个基本的弹出按钮

    使用jQuery Mobile创建一个基本的弹出按钮可以通过以下步骤完成: 步骤一:引入必要的代码文件 首先需要从jQuery Mobile官方网站下载压缩包,并引入必要的代码文件。推荐使用CDN的方式,这有利于提高网站的速度和性能。 在HTML文件头部引入如下代码: <!– 引入 jQuery 核心文件 –> <script src=…

    jquery 2023年5月12日
    00
  • jQWidgets jqxTreeGrid hierarchicalCheckboxes属性

    以下是关于 jQWidgets jqxTreeGrid 组件中 hierarchicalCheckboxes 属性的详细攻略。 jQWidgets jqxTreeGrid hierarchicalCheckboxes 属性 jQWidgets jqxTreeGrid 的 hierarchicalCheckboxes 属性用于启用或禁用 TreeGrid 控件…

    jquery 2023年5月12日
    00
  • jQuery :contains() 选择器

    以下是关于jQuery :contains()选择器的完整攻略: 什么是jQuery :contains()选择器? jQuery :contains()选择器是一种用于选择包含指定文本的元素的语法。使用这个选择器轻松选择包含指定文本的元素对其进行操作。 如何使用jQuery :contains()选择器? 可以使用以下代码来选择包含指定文本的元素: $(&…

    jquery 2023年5月12日
    00
  • Nodejs+express+html5 实现拖拽上传

    下面是讲解“Nodejs+express+html5 实现拖拽上传”的完整攻略。 1. 准备工作 首先,我们需要安装Node.js和Express框架。可以从官网下载安装包进行安装。安装后可以在命令行中运行node -v和npm -v命令验证Node.js和npm是否正确安装。然后,我们可以使用npm安装Express框架,命令如下: npm install…

    jquery 2023年5月27日
    00
  • 简单的pgsql pdo php操作类实现代码

    Pgsql PDO是PHP中操作PostgreSQL数据库的标准方式,可以使用PHP内置的PDO类来对Pgsql数据库进行操作。下面是一个简单的Pgsql PDO PHP操作类的实现代码: 创建PDO连接 try { $dsn = ‘pgsql:host=hostname;port=port;dbname=database’; $username = ‘us…

    jquery 2023年5月27日
    00
  • jQWidgets jqxNumberInput十进制属性

    以下是关于 jQWidgets jqxNumberInput 组件中十进制属性的详细攻略。 jQWidgets jqxNumberInput 十进制属性 jQWidgets jqxNumberInput 组件的十进制属性用于设置输入框中的数字的进制。 语法 $(‘#numberInput’).jqxNumberInput({ decimal: 2 }); 示…

    jquery 2023年5月12日
    00
  • jQWidgets jqxNumberInput getDecimal()方法

    以下是关于 jQWidgets jqxNumberInput 组件中 getDecimal() 方法的详细攻略。 jQWidgets jqxNumberInput getDecimal() 方法 jQWidgets jqxNumberInput 组件的 getDecimal 方法用于获取输入框中小数点后的位数。 语法 var decimal = $(‘#nu…

    jquery 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部