2012-01-11 57 views
6

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

回答

15

ExtJS的电网提供的添加功能两种方式:

  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.. 

}); 

这应该帮助您开始。

+0

谢谢。这就是我需要的。 – 2012-01-11 14:58:59

+1

“AbstractPlugin类是用户实现的插件应该继承的基类,该类定义了组件使用的基本API插件...” - http://docs.sencha.com/extjs/4.2.1 /#!/api/Ext.AbstractPlugin – mwoodman 2013-08-12 16:25:50

+1

任何人都可以告诉我在哪里实际创建插件文件以及如何将其包含在网格中? – Snowman 2014-06-16 09:31:53

3

如果你研究给定的插件src/grid/plugin/*,它们没有专门扩展像Ext.form.field.*那样的基类。所以,imo,这必须与你需要达成的目标相关。

例如,既RowEditingCellEditing延伸Editing作为其基类有编辑网格店的能力,而HeaderReorderHeaderResizer只是扩展Ext.util.Observable所以要实现共同的事件处理。

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

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

+1

Sencha的文档指出用户实现的插件应该继承自Ext.AbstractPlugin,根据@Asky的回答。请参阅http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.AbstractPlugin – mwoodman 2013-08-12 16:23:00

2

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