從您的代碼//var lala //= 1 2 or 3
,我相信,在創建時知道的lala
值菜單。所有你需要做的是設置菜單的項目,你想要的。
線沿線的東西:
var menuItems = [];
if (lala === 1) {
menuItems.push({
text: 'I like Ext',
checked: true, // condition 1
checkHandler: onItemCheck
});
}
else if (lala === 2) {
menuItems.push({
text: 'Choose a Date',
iconCls: 'calendar',
menu: dateMenu // <-- condition 2
});
}
else if (lala === 3) {
menuItems.push({
text: 'Choose a Color',
menu: colorMenu // <-- condition 3
})
}
var menu = Ext.create('Ext.menu.Menu', {
id: 'mainMenu',
items: menuItems
});
你一直談論 '負荷'。您的示例菜單沒有任何商店,因此實際上並未加載。
但是,如果您需要更改的飛行,當一些存儲加載(或其他一些事件觸發)菜單,你可以做這樣的:
// Set all menu items in menu
var menu = Ext.create('Ext.menu.Menu', {
id: 'mainMenu',
items: [
{
text: 'I like Ext',
itemId: 'lala1', // Item ID to find the component on the fly
hidden: lala !== 1, // if lala is already initialized
//hidden: true, // if lala is not initialized
checked: true, // condition 1
checkHandler: onItemCheck
},
{
text: 'Choose a Date',
itemId: 'lala2', // Item ID to find the component on the fly
hidden: lala !== 2, // If lala is already initialized
//hidden: true, // if lala is not initialized
iconCls: 'calendar',
menu: dateMenu // <-- condition 2
},
{
text: 'Choose a Color',
itemId: 'lala3', // Item ID to find the component on the fly
hidden: lala !== 3, // If lala is already initialized
//hidden: true, // if lala is not initialized
menu: colorMenu // <-- condition 3
}
]
});
// Your store load (or any other event of your choosing)
yourStore.on({
load: function() {
var newLala = getLalaSomehow(); // Get lala the way you do
// Get menu items by the item IDs set previously
var menuItemLala1 = menu.down('#lala1');
var menuItemLala2 = menu.down('#lala2');
var menuItemLala3 = menu.down('#lala3');
// Show/hide menu items based on a condition
menuItemLala1.setVisible(newLala === 1); // Only show when lala is 1
menuItemLala2.setVisible(newLala === 2); // Only show when lala is 2
menuItemLala3.setVisible(newLala === 3); // Only show when lala is 3
}
});
在上面的例子中,我我使用的是setVisible
方法,當傳入的參數是true
時,它顯示組件,並隱藏它,如果它是false
。
嗨,謝謝你的回覆,但如果你這樣做,它實際上隱藏了整個菜單。 – Frzzy
您必須在菜單項中設置'afterrender'監聽器,而不是菜單本身。另外,爲了避免與'this'混淆,帶有監聽器的組件(大多數情況下)作爲第一個參數傳遞,所以你可以調用'afterrender:function(menuItem){menuItem.hide(); }' – MarthyM