【发布时间】:2012-01-11 06:56:06
【问题描述】:
我想构建一个插件,它将在 Ext.Grid 上运行并允许对其进行一些操作(添加新行,在某些事件上更新它们等)我的插件应该扩展什么类型的组件以达到最佳效果?
【问题讨论】:
我想构建一个插件,它将在 Ext.Grid 上运行并允许对其进行一些操作(添加新行,在某些事件上更新它们等)我的插件应该扩展什么类型的组件以达到最佳效果?
【问题讨论】:
ExtJS Grid 提供了两种添加功能的方式:
插件:插件为组件提供自定义功能。 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..
});
这应该可以帮助您入门。
【讨论】:
如果您研究src/grid/plugin/*
中的给定插件,它们不会像Ext.form.field.*
那样专门扩展任何基类。所以,imo,这必须与您需要实现的目标相关。
例如,RowEditing
和 CellEditing
都将 Editing
扩展为它们的基类,以便能够编辑网格的存储,而 HeaderReorder
和 HeaderResizer
只是扩展 Ext.util.Observable
以实现通用事件处理.
最好的办法是扩展Ext.util.Observable
,如果在 Ext 中的任何给定类中都没有实现任何功能,那么至少你仍然可以触发一些事件。
插件只不过是添加到 Grid 对象的一组函数。如果我错了,请纠正我;)
【讨论】:
插件是跨组件共享的可重用功能。所有 EXTJS 插件都应该继承 Ext.AbstractPlugin 类
【讨论】: