Sto utilizzando un menu con un negozio in un progetto. Ecco un esempio:
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;
}
});
ho trovato questo uno sul forum di Sencha se IIRC, ma non riesce a trovare più il link. Ho apportato alcune modifiche alle icone, ecc ...
Su Ext.Array.each (record, .... È necessario definire la propria logica, Dipende dal modello. DisplayName che io uso per mostrare come testo. ho anche STOCK mio record in una proprietà di dati che ho fatto nella voce di menu. Sei completamente libero là.
Buona fortuna!
fonte
2012-11-08 09:37:28