2011-03-07 69 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