2011-03-07 20 views
2

我想將自定義右鍵單擊添加到多個spark列表控件。 我已經嘗試以下作爲項目渲染器。 (根據Flex 4烹飪書)。Flex4右鍵單擊使用ContextMenu的Spark List()

這裏完全渲染代碼http://pastebin.com/Kx8tJ1cY

當我右鍵點擊星火名單,我只是得到的Adobe默認的上下文菜單。 這是我添加任何代碼之前所具有的相同默認行爲。

誰能告訴我如何添加正確點擊,列表項Flex 4中

請和謝謝你。

+0

什麼不正確?你看不到ContextMenu? – 2011-03-07 15:48:32

+0

@Florian F默認的上下文菜單總是顯示。 @Jason Towne,當我得到一個有效的答案時,我打了接受。如果我找到自己的答案,那麼我就離開它。 – 2011-03-08 06:38:13

+0

「這根本不起作用」是不足以幫助我們的信息。什麼不工作? – 2011-03-08 09:11:33

回答

0

Christopher Huyler發佈something similar(源代碼available here)。來自文章:

Google's code repository開始抓住Javascript代碼。

第1步 - 設置自定義上下文菜單代碼

創建Flex Builder中一個新的Flex項目。將rightclick.js和swfobject.js複製到項目的html模板文件夾中。從這裏,我不得不做出一些改變......

  • 我修改了RightClick.init()函數接受一個對象和容器值作爲輸入。這允許我將應用程序的名稱作爲對象傳遞,而不是每次都調用相同的東西。
  • 我在index.template.html的頭文件中包含了rightclick.js和swfobject.js。
  • 我在身上添加了一個名爲「flashcontent」的新div。
  • 我添加了一個onload處理程序到body標籤來初始化RightClick
  • 我用新的SWFObject(...)替換了AC_FL_RunContent(...),確保維護所有的模板變量。

做出這些更改後,我確認在我的應用程序中沒有右鍵單擊上下文菜單。

第2步 - 監聽rightClick事件

接下來,我添加了幾行,以我的應用程序的主MXML文件來監聽,當我用鼠標右鍵單擊我的機應用將被調度的ExternalInterface的事件。

private function handleCreationComplete():void 
{ 
    ExternalInterface.addCallback("rightClick", handleRightClick); 
} 

private function handleRightClick():void 
{ 
    Alert.show("Right Click Success!"); 
} 

第3步 - 分派事件,以正確的對象

獲取事件的主要應用是很容易的,但我們其實是想通知相應的子對象時,用鼠標右鍵單擊事件發生。由於我沒有在應用程序中使用任何雙擊事件,因此我決定將每個右鍵單擊事件視爲雙擊事件。沒有兩個按鈕鼠標的用戶(也稱爲Mac用戶)只需雙擊即可獲得相同的菜單,而帶有兩個按鈕的用戶只需右鍵單擊即可。以下是我如何確保將事件分派給適當的對象。

private function handleRightClick():void 
{ 
    var objects:Array = systemManager.getObjectsUnderPoint(
     new Point(mouseX,mouseY)); 
    if (objects.length>0) 
    { 
     var object:Object = objects[objects.length-1]; 
     var relatedObject:InteractiveObject; 
     if (object is InteractiveObject) 
      relatedObject = object as InteractiveObject; 
     else if (object.parent && object.parent is InteractiveObject) 
      relatedObject = object.parent; 
     var event:MouseEvent = new MouseEvent(
      MouseEvent.DOUBLE_CLICK,true,false,mouseX,mouseY, 
      relatedObject); 
     object.dispatchEvent(event); 
    } 
} 

我希望這有助於!

+0

任何本地方式來獲得正確的點擊工作?我真的不想使用JS? – 2011-03-10 11:22:03

+0

@Craig Mc,據我所知,覆蓋原生右鍵單擊功能的所有解決方案都涉及到javascript。如果你不想使用JavaScript,那麼總會有ContextMenus http://livedocs.adobe.com/flex/3/html/help.html?content=Menus_4.html。這會將菜單選項添加到默認的Adobe上下文菜單。 – 2011-03-10 14:38:11

+0

嗨多數民衆贊成在一個我試圖使用,ContextMenus是我的問題,他們不顯示。我總是得到默認的上下文菜單。 – 2011-03-11 12:33:23