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!