<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Li Guoliang &#187; Flex右键</title>
	<atom:link href="http://liguoliang.com/tag/flex%e5%8f%b3%e9%94%ae/feed/" rel="self" type="application/rss+xml" />
	<link>http://liguoliang.com</link>
	<description>ActionScript Flex Java JEE PHP...</description>
	<lastBuildDate>Mon, 21 May 2012 17:04:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Flex中使用ContextMenu　－　添加,动态改变, 响应.</title>
		<link>http://liguoliang.com/2009/flex%e4%b8%ad%e4%bd%bf%e7%94%a8contextmenu%e3%80%80%ef%bc%8d%e3%80%80%e6%b7%bb%e5%8a%a0%e5%8a%a8%e6%80%81%e6%94%b9%e5%8f%98-%e5%93%8d%e5%ba%94/</link>
		<comments>http://liguoliang.com/2009/flex%e4%b8%ad%e4%bd%bf%e7%94%a8contextmenu%e3%80%80%ef%bc%8d%e3%80%80%e6%b7%bb%e5%8a%a0%e5%8a%a8%e6%80%81%e6%94%b9%e5%8f%98-%e5%93%8d%e5%ba%94/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 03:31:43 +0000</pubDate>
		<dc:creator>Guoliang</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[ContextMenu]]></category>
		<category><![CDATA[Flex右键]]></category>
		<category><![CDATA[Flex菜单]]></category>

		<guid isPermaLink="false">http://liguoliang.com/2009/03/840/</guid>
		<description><![CDATA[<p>AIR Only: <a href="http://liguoliang.com/2009/03/837/">AIR: 通过监听ContextMenuEvent.MENU_SELECT事件 动态改变菜单内容 </a></p>
<p>\ 这里是通用的:
<pre class="java" name="code".
	//Menus
	private var _menu:ContextMenu;
	private var _menuAddTopOU:ContextMenuItem;
	private var _menuAdd:ContextMenuItem;
	private var _menuEdit:ContextMenuItem;
	private var _menuRemove:ContextMenuItem;
</pre>
<pre class="java" name="code">
		_menu = new ContextMenu();
		_menuAddTopOU = new ContextMenuItem(RM.getString(BUNDLE_OUSETUP, "ous.menu.addTopOU"));
		_menuAdd = new ContextMenuItem(null, true);
		_menuEdit = new ContextMenuItem(null);
		_menuRemove = new ContextMenuItem(null);

		_menu.customItems.push(_menuAddTopOU);
		_menu.customItems.push(_menuAdd);
		_menu.customItems.push(_menuEdit);
		_menu.customItems.push(_menuRemove);
		_menu.addEventListener(ContextMenuEvent.MENU_SELECT, onMenuSelected);
		_menu.addEventListener(Event.SELECT, onMenuItemSelected);

		_treeOUs.contextMenu = _menu;

	// Menu打开后动态改变菜单内容
	private function onMenuSelected(event:ContextMenuEvent):void {
		...
		_menuAddTopOU.enabled = !tempNew; // add Top ou
		_menuAdd.enabled = (_treeOUs.selectedItem != null) &#038;&#038; (!_editorOU.editable);	// add ou
		if(_menuAdd.enabled) {
			_menuAdd.label = RM.getString(BUNDLE_OUSETUP, "ous.menu.add", [currentOU.nameFullLocalized]);
		}else {
			_menuAdd.label = RM.getString(BUNDLE_OUSETUP, "ous.menu.selectOneFirst");
		}

		..
	}

	// 选中Menu中某item后响应
	private function onMenuItemSelected(event:Event):void {
		if(event.target == _menuAddTopOU) { // 增加顶级部门
			onAction(_actionAddTopOU, null);
		}else ...
	}
</pre>
<p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p><p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></description>
			<content:encoded><![CDATA[<p>AIR Only: <a href="http://liguoliang.com/2009/03/837/">AIR: 通过监听ContextMenuEvent.MENU_SELECT事件 动态改变菜单内容 </a></p>
<p>\ 这里是通用的:
<pre class="java" name="code".
	//Menus
	private var _menu:ContextMenu;
	private var _menuAddTopOU:ContextMenuItem;
	private var _menuAdd:ContextMenuItem;
	private var _menuEdit:ContextMenuItem;
	private var _menuRemove:ContextMenuItem;
</pre>
<pre class="java" name="code">
		_menu = new ContextMenu();
		_menuAddTopOU = new ContextMenuItem(RM.getString(BUNDLE_OUSETUP, "ous.menu.addTopOU"));
		_menuAdd = new ContextMenuItem(null, true);
		_menuEdit = new ContextMenuItem(null);
		_menuRemove = new ContextMenuItem(null);

		_menu.customItems.push(_menuAddTopOU);
		_menu.customItems.push(_menuAdd);
		_menu.customItems.push(_menuEdit);
		_menu.customItems.push(_menuRemove);
		_menu.addEventListener(ContextMenuEvent.MENU_SELECT, onMenuSelected);
		_menu.addEventListener(Event.SELECT, onMenuItemSelected);

		_treeOUs.contextMenu = _menu;

	// Menu打开后动态改变菜单内容
	private function onMenuSelected(event:ContextMenuEvent):void {
		...
		_menuAddTopOU.enabled = !tempNew; // add Top ou
		_menuAdd.enabled = (_treeOUs.selectedItem != null) &#038;&#038; (!_editorOU.editable);	// add ou
		if(_menuAdd.enabled) {
			_menuAdd.label = RM.getString(BUNDLE_OUSETUP, "ous.menu.add", [currentOU.nameFullLocalized]);
		}else {
			_menuAdd.label = RM.getString(BUNDLE_OUSETUP, "ous.menu.selectOneFirst");
		}

		..
	}

	// 选中Menu中某item后响应
	private function onMenuItemSelected(event:Event):void {
		if(event.target == _menuAddTopOU) { // 增加顶级部门
			onAction(_actionAddTopOU, null);
		}else ...
	}
</pre>
<p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></content:encoded>
			<wfw:commentRss>http://liguoliang.com/2009/flex%e4%b8%ad%e4%bd%bf%e7%94%a8contextmenu%e3%80%80%ef%bc%8d%e3%80%80%e6%b7%bb%e5%8a%a0%e5%8a%a8%e6%80%81%e6%94%b9%e5%8f%98-%e5%93%8d%e5%ba%94/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AIR: 通过监听ContextMenuEvent.MENU_SELECT事件 动态改变菜单内容</title>
		<link>http://liguoliang.com/2009/flex-%e9%80%9a%e8%bf%87%e7%9b%91%e5%90%accontextmenueventmenu_select%e4%ba%8b%e4%bb%b6-%e5%8a%a8%e6%80%81%e6%94%b9%e5%8f%98%e8%8f%9c%e5%8d%95%e5%86%85%e5%ae%b9/</link>
		<comments>http://liguoliang.com/2009/flex-%e9%80%9a%e8%bf%87%e7%9b%91%e5%90%accontextmenueventmenu_select%e4%ba%8b%e4%bb%b6-%e5%8a%a8%e6%80%81%e6%94%b9%e5%8f%98%e8%8f%9c%e5%8d%95%e5%86%85%e5%ae%b9/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 01:47:30 +0000</pubDate>
		<dc:creator>Guoliang</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Air Menu]]></category>
		<category><![CDATA[ContextMenu]]></category>
		<category><![CDATA[Flex Menu]]></category>
		<category><![CDATA[Flex右键]]></category>
		<category><![CDATA[NativeMenu]]></category>

		<guid isPermaLink="false">http://liguoliang.com/2009/03/837/</guid>
		<description><![CDATA[某Tree上的menu
		_menu = new NativeMenu();
		_menuAddTopOU = new NativeMenuItem(&#34;Add Top OU&#34;);
		_menuAdd = new NativeMenuItem(&#34;Selcet one<p class='read-more'><a href='http://liguoliang.com/2009/flex-%e9%80%9a%e8%bf%87%e7%9b%91%e5%90%accontextmenueventmenu_select%e4%ba%8b%e4%bb%b6-%e5%8a%a8%e6%80%81%e6%94%b9%e5%8f%98%e8%8f%9c%e5%8d%95%e5%86%85%e5%ae%b9/'>More...</a></p><p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></description>
			<content:encoded><![CDATA[<p>某Tree上的menu
<pre class="java" name="code">		_menu = new NativeMenu();
		_menuAddTopOU = new NativeMenuItem(&quot;Add Top OU&quot;);
		_menuAdd = new NativeMenuItem(&quot;Selcet one OU ls&quot;);
		_menu.addItem(_menuAddTopOU);
		_menu.addItem(_menuAdd);
		_menu.addEventListener(ContextMenuEvent.MENU_SELECT, onMenuSelected);
		_menu.addEventListener(Event.SELECT, onMenuItemSelected);
		_treeOUs.contextMenu = _menu;</pre>
<p>监听函数:</p>
<pre class="java" name="code">
	// Menu打开后动态改变菜单内容
	private function onMenuSelected(event:ContextMenuEvent):void {
		var currentOU:OrgUnit = _treeOUs.selectedItem as OrgUnit;
		_menuAdd.enabled = _actionAdd.enabled;
		if(_menuAdd.enabled) {
			_menuAdd.label = "Add OU in " + currentOU.nameFullLocalized;
		}else {
			_menuAdd.label = "Select one UP first";
		}
	}

	// 选中Menu中某item后响应
	private function onMenuItemSelected(event:Event):void {
		if(event.target == _menuAddTopOU) {
			trace("右键点击增加顶级部门");
			onAction(_actionAddTopOU, null);
		}else if(event.target == _menuAdd) {
			trace("增加子部门");
			onAction(_actionAdd, null);
		}
	}
</pre>
<p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></content:encoded>
			<wfw:commentRss>http://liguoliang.com/2009/flex-%e9%80%9a%e8%bf%87%e7%9b%91%e5%90%accontextmenueventmenu_select%e4%ba%8b%e4%bb%b6-%e5%8a%a8%e6%80%81%e6%94%b9%e5%8f%98%e8%8f%9c%e5%8d%95%e5%86%85%e5%ae%b9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用ActionScript建立DataGrid, 添加右键, 增加列, 并设定列的ItemRenderer</title>
		<link>http://liguoliang.com/2009/%e4%bd%bf%e7%94%a8actionscript%e5%bb%ba%e7%ab%8bdatagrid-%e6%b7%bb%e5%8a%a0%e5%8f%b3%e9%94%ae-%e5%a2%9e%e5%8a%a0%e5%88%97-%e5%b9%b6%e8%ae%be%e5%ae%9a%e5%88%97%e7%9a%84itemrender/</link>
		<comments>http://liguoliang.com/2009/%e4%bd%bf%e7%94%a8actionscript%e5%bb%ba%e7%ab%8bdatagrid-%e6%b7%bb%e5%8a%a0%e5%8f%b3%e9%94%ae-%e5%a2%9e%e5%8a%a0%e5%88%97-%e5%b9%b6%e8%ae%be%e5%ae%9a%e5%88%97%e7%9a%84itemrender/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 16:59:39 +0000</pubDate>
		<dc:creator>Guoliang</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Air右键]]></category>
		<category><![CDATA[DataGrid]]></category>
		<category><![CDATA[DataGridColumn]]></category>
		<category><![CDATA[Flex右键]]></category>

		<guid isPermaLink="false">http://liguoliang.com/2009/01/679/</guid>
		<description><![CDATA[很多时候为了获得对组件的灵活控制, 不得不放弃MXML, 直接使用ActionScript.<p class='read-more'><a href='http://liguoliang.com/2009/%e4%bd%bf%e7%94%a8actionscript%e5%bb%ba%e7%ab%8bdatagrid-%e6%b7%bb%e5%8a%a0%e5%8f%b3%e9%94%ae-%e5%a2%9e%e5%8a%a0%e5%88%97-%e5%b9%b6%e8%ae%be%e5%ae%9a%e5%88%97%e7%9a%84itemrender/'></a></p><p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></description>
			<content:encoded><![CDATA[<p>很多时候为了获得对组件的灵活控制, 不得不放弃MXML, 直接使用ActionScript.
<pre class="java" name="code">
//新建一个DataGrid _dataGrid = new DataGrid();
//增加右键
var menu:NativeMenu = new NativeMenu();
var menuItemDelete:NativeMenuItem = new NativeMenuItem(&quot;Delete&quot;);
//监听事件,在右键选定Delete时运行该函数
 menuItemDelete.addEventListener(Event.SELECT, onMenuDeleteClicked);
//将该menuItem加入到Menu中
menu.addItem(menuItemDelete);
 _dataGrid.contextMenu = menu; //将菜单加入到DataGrid中 

columnLocale = new DataGridColumn(); //新建一个列
columnLocale.dataField ="locale";//设定DataGrid中locale列的EditItem;
comboBoxLocaleEditor = new ClassFactory(ComboBox); // D
comboBoxLocaleEditor.properties = {dataProvider : LocalizationItem.localeArray} //设定该EditorItem的属性
columnLocale.itemEditor = comboBoxLocaleEditor; 

var columnGender:DataGridColumn = new DataGridColumn();
 columnGender.headerText = "Gender&#038;quot";
columnGender.dataField = "Gender_";
//使用ItemRender
columnGender.itemRenderer = new ClassFactory(Gender_Label);
 _dataGrid.showHeaders = false; //隐藏DataGrid的Header
_dataGrid.columns = [columnLocale, columnGender]; //这一个数组,存放DataGrid的Column 

_dataGrid.dataProvider = value; //设定dataProvider </pre>
<p>具体在实际中的使用, 无异于MXML. </p>
<p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></content:encoded>
			<wfw:commentRss>http://liguoliang.com/2009/%e4%bd%bf%e7%94%a8actionscript%e5%bb%ba%e7%ab%8bdatagrid-%e6%b7%bb%e5%8a%a0%e5%8f%b3%e9%94%ae-%e5%a2%9e%e5%8a%a0%e5%88%97-%e5%b9%b6%e8%ae%be%e5%ae%9a%e5%88%97%e7%9a%84itemrender/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>AIR中通过右键直接选定基于LIST容器[DataGrid, List, Tree等]的数据 &#8211; Select List item with mouse right-click</title>
		<link>http://liguoliang.com/2009/air%e4%b8%ad%e9%80%9a%e8%bf%87%e5%8f%b3%e9%94%ae%e7%9b%b4%e6%8e%a5%e9%80%89%e5%ae%9a%e5%9f%ba%e4%ba%8elist%e5%ae%b9%e5%99%a8datagrid-list-tree%e7%ad%89%e7%9a%84%e6%95%b0%e6%8d%ae-select-list-ite/</link>
		<comments>http://liguoliang.com/2009/air%e4%b8%ad%e9%80%9a%e8%bf%87%e5%8f%b3%e9%94%ae%e7%9b%b4%e6%8e%a5%e9%80%89%e5%ae%9a%e5%9f%ba%e4%ba%8elist%e5%ae%b9%e5%99%a8datagrid-list-tree%e7%ad%89%e7%9a%84%e6%95%b0%e6%8d%ae-select-list-ite/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 15:18:16 +0000</pubDate>
		<dc:creator>Guoliang</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Air右键]]></category>
		<category><![CDATA[DataGrid]]></category>
		<category><![CDATA[Flex右键]]></category>
		<category><![CDATA[List]]></category>
		<category><![CDATA[Tree]]></category>

		<guid isPermaLink="false">http://liguoliang.com/2009/01/675/</guid>
		<description><![CDATA[在很多情况下, 我们在DataGrid, List, Tree等容器中使用右键, 进行如修改, 删除 某行的操作.  问题是如果该容器初始状态下直接进行右键点击时, 并不能选定任何数据. 通过监听右键菜单SELECT事件, 获取到当前右键所击位置的Index, 并将之赋值给DataGrid或其他容器的SelectIndex, 完成点击操作<p class='read-more'><a href='http://liguoliang.com/2009/air%e4%b8%ad%e9%80%9a%e8%bf%87%e5%8f%b3%e9%94%ae%e7%9b%b4%e6%8e%a5%e9%80%89%e5%ae%9a%e5%9f%ba%e4%ba%8elist%e5%ae%b9%e5%99%a8datagrid-list-tree%e7%ad%89%e7%9a%84%e6%95%b0%e6%8d%ae-select-list-ite/'></a></p><p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></description>
			<content:encoded><![CDATA[<p><strong>问题:</strong> 在很多情况下, 我们在DataGrid, List, Tree等容器中使用右键, 进行如修改, 删除 某行的操作.&#160; 问题是如果该容器初始状态下直接进行右键点击时, 并不能选定任何数据. </p>
<p><strong>解决: </strong>通过监听右键菜单SELECT事件, 获取到当前右键所击位置的Index, 并将之赋值给DataGrid或其他容器的SelectIndex, 完成点击操作</p>
<p><strong>详细实现:&#160; </strong>以DataGrid为例.</p>
<p>第一步, 首先给DataGrid添加菜单</p>
<pre class="java" name="code">			var dgMenu:NativeMenu = new NativeMenu();
			var del:NativeMenuItem  = new NativeMenuItem(&quot;Test&quot;);
			del.addEventListener(Event.SELECT, onRightClickDel);
			dgMenu.addItem(del);
			dgMenu.addEventListener(ContextMenuEvent.MENU_SELECT, onRightClicked);
			_dataGridStudent.contextMenu = dgMenu;</pre>
<p>第二步, 响应函数:</p>
<pre class="java" name="code">	/**响应右键点击 */
	private function onRightClicked(e:ContextMenuEvent):void {
		var rightClickItemRender:IListItemRenderer;

		if(e.mouseTarget is IListItemRenderer) {
			rightClickItemRender = IListItemRenderer(e.mouseTarget);
		}else if(e.mouseTarget.parent is IListItemRenderer) {
			rightClickItemRender = IListItemRenderer(e.mouseTarget.parent);
		}

		if(rightClickItemRender != null) {
			var rightClickIndex:int = _dataGridStudent.itemRendererToIndex(rightClickItemRender);
			if(_dataGridStudent.selectedIndex != rightClickIndex) {
				_dataGridStudent.selectedIndex = rightClickIndex;
				onSlectedChange();
			}
		}
		trace(&quot;通过右键单击获得选定的行: &quot; + _dataGridStudent.selectedIndex);
	}</pre>
<p>Delete响应函数:</p>
<pre class="java" name="code">	/** 当右键菜单的Delete点击后响应*/
	private function onRightClickDel(e:Event):void {
		//在这里放逻辑....
	}</pre>
<p><strong>效果:</strong></p>
<p><a href="http://liguoliang.com/wp-content/uploads/2009/01/image2.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="313" alt="image" src="http://liguoliang.com/wp-content/uploads/2009/01/image-thumb2.png" width="390" border="0" /></a> </p>
<p>控制台Trace信息:</p>
<p><em>通过右键单击获得选定的行: 1</em></p>
</p>
<p>&#160;</p>
<p>参考资料: <a href="http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&amp;postId=11606&amp;productId=2&amp;loc=en_US" target="_blank">Adobe CookBook&#160; Select List item with mouse right-click</a></p>
<p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></content:encoded>
			<wfw:commentRss>http://liguoliang.com/2009/air%e4%b8%ad%e9%80%9a%e8%bf%87%e5%8f%b3%e9%94%ae%e7%9b%b4%e6%8e%a5%e9%80%89%e5%ae%9a%e5%9f%ba%e4%ba%8elist%e5%ae%b9%e5%99%a8datagrid-list-tree%e7%ad%89%e7%9a%84%e6%95%b0%e6%8d%ae-select-list-ite/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

