2012-11-08 6 views
5

Ich bin neu in extjs.Ich möchte ein Geschäft mit der Auswahl eines Menüelements aus Ext.menu.Menü verknüpfen. Ich benutze extjs 4.1.0. Ich suchte im Internet sogar ging durch Sencha Doc, aber ich konnte keinen Weg finden, dies zu erreichen.Assozieren eines Geschäfts mit Ext.menu.Menü

Gibt es einen Weg, dies zu erreichen?

Vielen Dank im Voraus.

Antwort

12

Ich verwende ein Menü mit einem Geschäft in einem Projekt. Hier ein Beispiel:

Ext.define("Ext.ux.menu.DynamicMenu", { 
    extend: "Ext.menu.Menu", 
    alias: 'widget.dynamicmenu', 
    loaded: false, 
    loadMsg: 'Loading...', 
    store: undefined, 
    icon: '', 
    constructor: function (config) { 
     var me = this; 
     Ext.apply(me, config); 

     me.callParent(); 
    }, 
    initComponent: function() { 
     var me = this; 
     me.callParent(arguments); 
     me.on('show', me.onMenuLoad, me); 
     listeners = { 
      scope: me, 
      load: me.onLoad, 
      beforeload: me.onBeforeLoad 
     }; 
     me.mon(me.store, listeners); 
    }, 
    onMenuLoad: function() { var me = this; if (!me.store.loaded) me.store.load(); }, 
    onBeforeLoad: function (store) { this.updateMenuItems(false); }, 
    onLoad: function (store, records) { this.updateMenuItems(true, records); }, 
    updateMenuItems: function (loadedState, records) { 
     var me = this; 
     me.removeAll(); 
     if (loadedState) { 
      me.setLoading(false, false); 
      Ext.Array.each(records, function (record, index, array) { 
       me.add({ 
        text: record.get('DisplayName'), 
        data: record, 
        icon: me.icon 
       }); 

      }); 
      me.store.loaded = true; 
     } 
     else { 
      me.add({ width: 75, height: 40 }); 
      me.setLoading(me.loadMsg, false); 
     } 
     me.loaded = loadedState; 
    } 
}); 

ich diesen auf den sencha Foren, wenn IIRC gefunden, kann aber nicht den Link mehr finden. Ich habe einige Verbesserungen für Symbole usw. gemacht, ...

Auf der Ext.Array.each (records, .... Sie müssen Ihre eigene Logik definieren, Es ist abhängig von Ihrem Modell. Mein Modell hat a DisplayName, den ich benutze, um als Text anzuzeigen. Ich lagere auch meinen Datensatz in einer Dateneigenschaft, die ich in dem Menüeintrag gemacht habe.

Viel Glück!