2012-11-08 69 views
5

我是extjs.s的新手。我想從Ext.menu.Menu中選擇一個菜單項關聯商店。我正在使用extjs 4.1.0。我在網上搜索,甚至經過sencha文件,但我找不到任何方式來實現這一目標。聯合Ext.menu.Menu的商店

有沒有辦法實現它?

在此先感謝。

回答

12

我在一個項目中使用了商店菜單。這裏有一個例子:

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; 
    } 
}); 

我發現了煎茶論壇這一個,如果IIRC,但不能再找到鏈接。我做了一些調整圖標等,...

關於Ext.Array.each(記錄,.... 你需要定義自己的邏輯,這取決於你的模型。顯示名稱,我用來顯示爲文本,我也將我的記錄存儲在我在菜單項中製作的數據屬性中,您完全免費。

祝你好運!