2012-01-11 17 views
6

Chciałbym zbudować wtyczkę, która będzie działała na Ext.Grid i pozwoli na niektóre operacje na niej (dodawanie nowych wierszy, aktualizowanie ich w niektórych zdarzeniach itp.) Jaki typ komponentu powinien rozszerzyć mój plugin osiągnąć najlepsze wyniki?Budowanie wtyczki dla ExtJS Grid

Odpowiedz

15

ExtJS Siatka zapewnia dwa sposoby dodawania funkcjonalności:

  1. Plugins
  2. funkcje

Wtyczki: Wtyczki zapewniają niestandardowych funkcji dla komponentu . ExtJS 4 wprowadził ten system, aby programiści mogli wprowadzić swoje niestandardowe funkcje do komponentu. Jest on określony jako obiekt lub tablica obiektów przy użyciu atrybutu klasy siatki plugins.

Zasadniczo wtyczka jest klasą ExtJS, która zazwyczaj nie musi rozszerzać żadnej klasy ExtJS. Obowiązkową częścią klasy wtyczek jest to, że powinna ona mieć metodę init, którą system wtyczek wywołuje w celu zainicjowania wtyczki. Ta metoda powinna przyjąć parametr (który będzie odniesieniem do twojej siatki). Metoda init powinna konfigurować wszystkie niestandardowe zdarzenia (jeśli istnieją) lub podłączyć metodę, która nasłuchuje zdarzeń.

Oto przykładowy kod szkielet:

Ext.define('Ext.ux.grid.MyPlugin', { 
    alias: 'plugin.ux.muplugin', 
    init: function(grid) { 
     // init events and add listeners... 
    }, 

    customFunction: function(par1, par2) { 

     // some code... 
    }, 

}); 

Cechy: Feature to rodzaj wtyczki, która jest dostępna tylko dla panelu siatki. Podstawową klasą dla funkcji jest Ext.grid.feature.Feature. Tę klasę należy rozszerzyć, jeśli planujesz utworzyć funkcję.

Oto przykład:

Ext.define('Ext.grid.feature.MyFeature', {  
    extend: 'Ext.grid.feature.Feature', 

    alias: 'feature.myfeature', 

    // other methods.. 

}); 

To powinno pomóc Ci zacząć.

+0

dzięki. Tego właśnie potrzebowałem. –

+1

"Klasa AbstractPlugin jest klasą podstawową, z której powinny dziedziczyć wtyczki implementowane przez użytkownika. Ta klasa definiuje podstawowe API wtyczek używanych przez komponenty ..." - http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.AbstractPlugin – mwoodman

+1

Czy ktoś może mi powiedzieć, gdzie właściwie utworzyć plik wtyczki i jak dołączyć go do siatki? – Snowman

3

Jeśli uczysz się podanych wtyczek w src/grid/plugin/*, nie rozszerzają one konkretnie żadnej klasy bazowej, tak jak to robią Ext.form.field.*. Więc, imo, to musi być związane z tym, co musisz osiągnąć.

Na przykład zarówno RowEditing i CellEditing rozciąga Editing jako klasy bazowej mieć możliwość edycji magazynu dla siatki, natomiast HeaderReorder i rozciąga Ext.util.ObservableHeaderResizer tylko tak, aby osiągnąć wspólny obsługi zdarzeń.

Najlepszym rozwiązaniem jest przedłużenie Ext.util.Observable, jeśli żadna z funkcjonalności nie została zaimplementowana w żadnych klasach w Ext, więc przynajmniej możesz odpalić niektóre wydarzenia.

Wtyczki to nic innego jak zestaw funkcji dodanych do obiektu siatki. Popraw mnie jeśli się mylę;)

+1

Dokumenty Sencha wskazują, że zaimplementowane przez użytkownika wtyczki powinny dziedziczyć z Ext.AbstractPlugin, za odpowiedź @Asky. Zobacz http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.AbstractPlugin – mwoodman

2

Wtyczki są funkcjami wielokrotnego użytku, które są wspólne dla różnych komponentów. wszystkie wtyczki EXTJS powinny dziedziczyć klasę Ext.AbstractPlugin

Powiązane problemy