2014-01-06 222 views
0

我有一個菜單3項。如果某個條件爲真,我想在渲染頁面之前模擬一個項目點擊,例如設置要選擇的默認操作。我動態地創建我的菜單。模擬菜單項點擊

Store.each(function(n) { 
    var rec = n; 

     var menuItem = new Ext.menu.Item({ 
      text: rec.data.name, 
      value: rec.data.url, 

     }); 

     Menu.add(menuItem); 

     //if some condition set item as if it was clicked(selected) 

}); 

我想設置一個菜單中的某個項目作爲活動,就像它被點擊一樣。

+0

您是試圖實際點擊菜單項,還是隻是突出顯示? – lmno

+0

點擊它就好像它被選中一樣 – Jacob

+0

請看修改後的答案。 – lmno

回答

0

如果您使用.fireEvent()方法,您可以在菜單項上觸發一個click事件。

所以,

if(some condition){ 
    menuItem.fireEvent('click'); 
} 

此外,您將需要在菜單項的監聽器捕獲此事件

var menuItem = new Ext.menu.Item({ 
    text: "menu Item", 
    listeners:{ 
     click:function(){ alert("you clicked the menu item"); } 
    } 
}); 

這裏是一個工作示例: http://jsfiddle.net/9Lpg7/

最後,我想想補充一點,fireEvent()我不是完全必要的。由於menuItem具有handler配置,因此您可以簡單地在別處定義函數,並將其用作menuItem處理程序,並在條件爲真時調用它。

var myClickFunction = function(){ alert("cooler way"); } 

var menuItem = new Ext.menu.Item({ 
    text: "menu Item", 
    handler:myClickFunction 
}); 

if(some condition){ 
    myClickFunction(); 
} 
+0

對不起,但它似乎並沒有引發事件。 – Jacob

+0

問題是菜單設置在一個按鈕下。 – Jacob

+0

請您詳細說明爲什麼在按鈕下是一個問題?如果你使用第二種方法,它應該不會影響菜單(或menuItem)的位置。 – lmno