【问题标题】:Building plugin for ExtJS GridExtJS Grid 的构建插件
【发布时间】:2012-01-11 06:56:06
【问题描述】:

我想构建一个插件,它将在 Ext.Grid 上运行并允许对其进行一些操作(添加新行,在某些事件上更新它们等)我的插件应该扩展什么类型的组件以达到最佳效果?

【问题讨论】:

    标签: extjs extjs4


    【解决方案1】:

    ExtJS Grid 提供了两种添加功能的方式:

    1. 插件
    2. 功能

    插件:插件为组件提供自定义功能。 ExtJS 4 引入了这个系统,以便开发人员可以将他们的自定义功能注入到组件中。使用网格类的plugins 属性将其指定为对象或对象数组。

    基本上,插件是一个 ExtJS 类,通常不需要扩展任何 ExtJS 类。插件类的强制部分是,它应该有一个init 插件系统调用的方法来初始化插件。此方法应采用一个参数(这将是对您的网格的引用)。 init 方法应该配置所有自定义事件(如果有)或连接监听事件的方法。

    这是一个示例骨架代码:

    Ext.define('Ext.ux.grid.MyPlugin', {
        alias: 'plugin.ux.muplugin',
        init: function(grid) {
            // init events and add listeners...
        },
    
        customFunction: function(par1, par2) {
    
           // some code...
        },
    
    }); 
    

    功能:功能是一种插件,仅适用于网格面板。功能的基类是Ext.grid.feature.Feature。如果你打算创建一个特性,你需要扩展这个类。

    这是一个示例:

    Ext.define('Ext.grid.feature.MyFeature', {    
        extend: 'Ext.grid.feature.Feature',
    
        alias: 'feature.myfeature',
    
        // other methods..
    
    }); 
    

    这应该可以帮助您入门。

    【讨论】:

    • "AbstractPlugin 类是用户实现的插件应该继承的基类。这个类定义了组件使用的插件的基本 API..." - docs.sencha.com/extjs/4.2.1/#!/api/Ext.AbstractPlugin
    • 谁能告诉我在哪里实际创建插件文件以及如何将它包含在网格中?
    【解决方案2】:

    如果您研究src/grid/plugin/* 中的给定插件,它们不会像Ext.form.field.* 那样专门扩展任何基类。所以,imo,这必须与您需要实现的目标相关。

    例如,RowEditingCellEditing 都将 Editing 扩展为它们的基类,以便能够编辑网格的存储,而 HeaderReorderHeaderResizer 只是扩展 Ext.util.Observable 以实现通用事件处理.

    最好的办法是扩展Ext.util.Observable,如果在 Ext 中的任何给定类中都没有实现任何功能,那么至少你仍然可以触发一些事件。

    插件只不过是添加到 Grid 对象的一组函数。如果我错了,请纠正我;)

    【讨论】:

    【解决方案3】:

    插件是跨组件共享的可重用功能。所有 EXTJS 插件都应该继承 Ext.AbstractPlugin 类

    【讨论】: