2012-01-11 39 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