<?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; ComboBox</title>
	<atom:link href="http://liguoliang.com/tag/combobox/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>Flex3.5 bug: 改变ComboBox DataProvider后UI不更新的初步解决</title>
		<link>http://liguoliang.com/2010/flex3-5-bug-%e6%94%b9%e5%8f%98combobox-dataprovider%e5%90%8eui%e4%b8%8d%e6%9b%b4%e6%96%b0%e7%9a%84%e5%88%9d%e6%ad%a5%e8%a7%a3%e5%86%b3/</link>
		<comments>http://liguoliang.com/2010/flex3-5-bug-%e6%94%b9%e5%8f%98combobox-dataprovider%e5%90%8eui%e4%b8%8d%e6%9b%b4%e6%96%b0%e7%9a%84%e5%88%9d%e6%ad%a5%e8%a7%a3%e5%86%b3/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 06:12:18 +0000</pubDate>
		<dc:creator>Guoliang</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[ComboBox]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Flex 3.5]]></category>

		<guid isPermaLink="false">http://liguoliang.com/2010/08/1378/</guid>
		<description><![CDATA[<p><b>基本信息描述:</b></p>
<p>在SDK升级到3.5后, 突然发现很多ComboBox(多数都是好多级联动)无法继续正常工作. </p>
<p>直接表现为: 联动菜单:</p>
<p><a href="http://liguoliang.com/wp-content/uploads/2010/08/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://liguoliang.com/wp-content/uploads/2010/08/image_thumb.png" width="244" height="184" /></a>&#160; <a href="http://liguoliang.com/wp-content/uploads/2010/08/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://liguoliang.com/wp-content/uploads/2010/08/image_thumb1.png" width="219" height="186" /></a>     <br />左图: 正常工作的级联ComboBox&#160;&#160;&#160;&#160;&#160; <br />右图: 未正常工作,&#160; <br />先选择教育类型为高级中学,&#160; 年级显示初中数据, 只有一个年级初一.     <br />然后切换<strong>教育类型为高中, 此时年级DP已经更新为高中年级数组, 但仍显示前一次的初中年级</strong>; </p>
<p> </p><p class='read-more'><a href='http://liguoliang.com/2010/flex3-5-bug-%e6%94%b9%e5%8f%98combobox-dataprovider%e5%90%8eui%e4%b8%8d%e6%9b%b4%e6%96%b0%e7%9a%84%e5%88%9d%e6%ad%a5%e8%a7%a3%e5%86%b3/'>More...</a></p><p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></description>
			<content:encoded><![CDATA[<p><b>基本信息描述:</b></p>
<p>在SDK升级到3.5后, 突然发现很多ComboBox(多数都是好多级联动)无法继续正常工作. </p>
<p>直接表现为: 联动菜单:</p>
<p><a href="http://liguoliang.com/wp-content/uploads/2010/08/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://liguoliang.com/wp-content/uploads/2010/08/image_thumb.png" width="244" height="184" /></a>&#160; <a href="http://liguoliang.com/wp-content/uploads/2010/08/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://liguoliang.com/wp-content/uploads/2010/08/image_thumb1.png" width="219" height="186" /></a>     <br />左图: 正常工作的级联ComboBox&#160;&#160;&#160;&#160;&#160; <br />右图: 未正常工作,&#160; <br />先选择教育类型为高级中学,&#160; 年级显示初中数据, 只有一个年级初一.     <br />然后切换<strong>教育类型为高中, 此时年级DP已经更新为高中年级数组, 但仍显示前一次的初中年级</strong>; </p>
<p> <span id="more-1378"></span>
<p>下拉框高度有四个单位, 可见高度准确, 但数据未更新.也无法选定. </p>
<p><b>解决方法:</b></p>
<p>在Set ComboBox DataProvider后, 再set 该ComboBox.listdown.dataprovider, 具体代码: </p>
<pre class="java" name="code">		combo.dataProvider = dp;
		if(combo.dropdown != null) {
			combo.dropdown.dataProvider = dp;
		}</pre>
<p><b>遗留问题:</b></p>
<p>在使用时, 初次选定comboBox数据之前, comboBox的listdown宽度/高度可能会发生异常.&#160; 如:<br />
  <br /><a href="http://liguoliang.com/wp-content/uploads/2010/08/image2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://liguoliang.com/wp-content/uploads/2010/08/image_thumb2.png" width="244" height="185" /></a>&#160; 注意: listdown的宽度, 跟第一个图正常工作时的对比 -(在首次选定前)宽度没有自动更新. </p>
<p></p>
<p> 尝试在Set DP后validateNow, invalidateDisplayList等方法, 无效; </p>
<p><b>其他尝试:</b></p>
<p>1. 尝试在set dp时 先Rmove dp内数据, 再逐个将新数据加入到原DP内, 可行 &#8211; 但ComboBox的宽度不会自动调整(可能是因为DP没有改变, 未激发Event一类的) </p>
<p>2. 尝试在set dp后由dp主动派发: CollectionEventKind.RESET事件, 无效. </p>
<p>参考: </p>
<h5>Changing DataProvider in a Flex ComboBox Problem Fix <a title="http://www.newtriks.com/?p=935" href="http://www.newtriks.com/?p=935">http://www.newtriks.com/?p=935</a></h5>
<p><b>附录 代码</b></p>
<pre class="java" name="code">	/**
	 * 解决Flex3.5中ComboBox的bug - Combobox不能及时显示数据 - 尤其在外部设定了DP后, combo下拉后只能通过DP长度计算Dropdown的高度, 但不能显示数据.
	 * 解决方案有基本有两个:
	 * 		1. (不推荐)保持ComboBox的DP对象不变, 如ArrayCollection, 不直接Set而是将现有数据源情况后将新的逐个add.
	 * 		2. 在set dp时, 同时set给combo.dropdown.dataprovider
	 * 但仍旧存在一个问题: comboBox下拉框的宽度:
	 * 		使用1时, comboBox跟下拉框宽度都不会根据数据源中最大长度项目而改变;
	 * 		使用2时, 在首次选定前, 仅下拉框的宽度不能随之改变. (暂时不妨碍使用)
	 * 虽然在改变dp后立即使用了validateNow,
	 *  @see http://www.newtriks.com/?p=935
	 */
	protected static function setComboDataProvider(combo:ComboBox, dp:ArrayCollection):void {

		// 1. 方法一: 保持数据源不变, 仅改变期中数据.
//		var dpAC:ArrayCollection = combo.dataProvider as ArrayCollection;
//		if(dpAC != null) {
//			dpAC.removeAll();
//		}else {
//			dpAC = new ArrayCollection();
//			combo.dataProvider = dpAC;
//		}
//		ArrayUtils.addAllElements(dp, dpAC);

		// 2. 方法二: 同时设置dropdown的dataProvider
		combo.dataProvider = dp;
		if(combo.dropdown != null) {
			combo.dropdown.dataProvider = dp;
		}
//
//		// 试图通过validate等方法 及时的更新dropdown的宽度, 但扔无济于事. 使用1时combo/dropdown的宽度都不会更新, 使用2时, 在首次选定数据前, dropdown的宽度不更新.
//		combo.validateNow();
//		combo.invalidateDisplayList();
//
//		combo.dropdown.validateNow();
//		combo.dropdown.validateDisplayList();
//		combo.dropdown.invalidateDisplayList();
	}</pre>
<p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></content:encoded>
			<wfw:commentRss>http://liguoliang.com/2010/flex3-5-bug-%e6%94%b9%e5%8f%98combobox-dataprovider%e5%90%8eui%e4%b8%8d%e6%9b%b4%e6%96%b0%e7%9a%84%e5%88%9d%e6%ad%a5%e8%a7%a3%e5%86%b3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex: 输入组件 &#8211; TextInput, ComboBox, Radiobutton, TextArea等 对其输入内容进行验证</title>
		<link>http://liguoliang.com/2009/flex-%e8%be%93%e5%85%a5%e7%bb%84%e4%bb%b6-textinput-combobox-radiobutton-textarea%e7%ad%89-%e5%af%b9%e5%85%b6%e8%be%93%e5%85%a5%e5%86%85%e5%ae%b9%e8%bf%9b%e8%a1%8c%e9%aa%8c%e8%af%81/</link>
		<comments>http://liguoliang.com/2009/flex-%e8%be%93%e5%85%a5%e7%bb%84%e4%bb%b6-textinput-combobox-radiobutton-textarea%e7%ad%89-%e5%af%b9%e5%85%b6%e8%be%93%e5%85%a5%e5%86%85%e5%ae%b9%e8%bf%9b%e8%a1%8c%e9%aa%8c%e8%af%81/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 06:01:21 +0000</pubDate>
		<dc:creator>Guoliang</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[ComboBox]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RadioButton]]></category>
		<category><![CDATA[TextArea]]></category>
		<category><![CDATA[TextInput]]></category>

		<guid isPermaLink="false">http://liguoliang.com/2009/02/780/</guid>
		<description><![CDATA[如: 某编辑器:
<a href="http://liguoliang.com/wp-content/uploads/2009/02/image5.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="image" src="http://liguoliang.com/wp-content/uploads/2009/02/image-thumb5.png" width="645" border="0" /></a>
代码:
textName.addEventListener(Event.CHANGE, onTextNameChange);//增加监听函数,监听EventChange, 如果不需实时验证, 可监听FlexEvent.VALUE_COMMIT事件.
	 //-----------<p class='read-more'><a href='http://liguoliang.com/2009/flex-%e8%be%93%e5%85%a5%e7%bb%84%e4%bb%b6-textinput-combobox-radiobutton-textarea%e7%ad%89-%e5%af%b9%e5%85%b6%e8%be%93%e5%85%a5%e5%86%85%e5%ae%b9%e8%bf%9b%e8%a1%8c%e9%aa%8c%e8%af%81/'>More...</a></p><p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></description>
			<content:encoded><![CDATA[<p>如: 某编辑器:</p>
<p><a href="http://liguoliang.com/wp-content/uploads/2009/02/image5.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="image" src="http://liguoliang.com/wp-content/uploads/2009/02/image-thumb5.png" width="645" border="0" /></a></p>
<p>代码:</p>
<pre class="java" name="code">textName.addEventListener(Event.CHANGE, onTextNameChange);//增加监听函数,监听EventChange, 如果不需实时验证, 可监听FlexEvent.VALUE_COMMIT事件.
	 //------------------Validation - Name -  on Event.Change------------
	 private function onTextNameChange(e:Event = null):void {
		if(StringUtils.trim(textName.text).length &lt; 2) {
			textName.errorString = &quot;Name不能少于2个字符, 请重新输入&quot;;
		}else if(StringUtils.trim(textName.text) == &quot;String&quot;) {
			textName.errorString = &quot;Name不可为'String'&quot;;
		}else {
			textName.errorString = null;
		}
		setButton();
	 }</pre>
<p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></content:encoded>
			<wfw:commentRss>http://liguoliang.com/2009/flex-%e8%be%93%e5%85%a5%e7%bb%84%e4%bb%b6-textinput-combobox-radiobutton-textarea%e7%ad%89-%e5%af%b9%e5%85%b6%e8%be%93%e5%85%a5%e5%86%85%e5%ae%b9%e8%bf%9b%e8%a1%8c%e9%aa%8c%e8%af%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ActionScript中使用自定义组件 Use CustomUI in Flex with ActionScript</title>
		<link>http://liguoliang.com/2008/actionscript%e4%b8%ad%e4%bd%bf%e7%94%a8%e8%87%aa%e5%ae%9a%e4%b9%89%e7%bb%84%e4%bb%b6-use-customui-in-flex-with-actionscript/</link>
		<comments>http://liguoliang.com/2008/actionscript%e4%b8%ad%e4%bd%bf%e7%94%a8%e8%87%aa%e5%ae%9a%e4%b9%89%e7%bb%84%e4%bb%b6-use-customui-in-flex-with-actionscript/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 03:12:30 +0000</pubDate>
		<dc:creator>Guoliang</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[ComboBox]]></category>
		<category><![CDATA[DataGrid]]></category>
		<category><![CDATA[itemEditor]]></category>

		<guid isPermaLink="false">http://liguoliang.com/2008/10/251/</guid>
		<description><![CDATA[一: 需求
要求使用get ui获得一个UICompontent[DataGrid], 其中DataGrid某列的ItemEditor为ComboBox,且该UICompontent的右键菜单中有一个Item: 删除 [删除当前选定的行]    使用set value 来设定该UIComponten<p class='read-more'><a href='http://liguoliang.com/2008/actionscript%e4%b8%ad%e4%bd%bf%e7%94%a8%e8%87%aa%e5%ae%9a%e4%b9%89%e7%bb%84%e4%bb%b6-use-customui-in-flex-with-actionscript/'>More...</a></p><p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></description>
			<content:encoded><![CDATA[<h3>一: 需求</h3>
<p>要求使用get ui获得一个UICompontent[DataGrid], 其中DataGrid某列的ItemEditor为ComboBox,且该UICompontent的右键菜单中有一个Item: 删除 [删除当前选定的行]    <br />使用set value 来设定该UICompontent的dataProvider.[为了简单起见, 在测试时直接set一个ArrayCollection]</p>
<h3>二: 分析</h3>
<p>建议一个ItemEditor的类, 在该类中增加名为 get ui, 返回值为UICompontent, 属性为Public的函数, 在该类中新建DataGrid, 设置DataGrid的属性, 增加右键, return该DataGrid,完成任务</p>
<p>要点:</p>
<p>1:DataGrid设置ItemEditor为ComboBox    <br />2:Air中使用右键</p>
<h3>三: 代码实现[Set Value比较简单,故省略]</h3>
<pre class="java" name="code">/**
	 * 在外界呼叫get ui时,返回一个UICompontent,该UICompontent包含以下内容:
	 * 右键: Restore
	 * 返回一个UICompontent[此处为DataGrid]
	 */
	public function get ui():UIComponent {
		if(_dataGrid != null) {
			return _dataGrid;
		}

		//新建一个DataGrid
	 	_dataGrid = new DataGrid();
	 	_dataGrid.editable = true;	

		//增加右键
		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 = &quot;locale&quot;;
	 	//设定DataGrid中locale列的EditItem;
	 	comboBoxLocaleEditor = new ClassFactory(ComboBox); // DisabledComboBox);
	 	comboBoxLocaleEditor.properties = {dataProvider : LocalizationItem.localeArray} //设定该EditorItem的属性
	 	columnLocale.itemEditor = comboBoxLocaleEditor;

                _dataGrid.showHeaders = false; //隐藏DataGrid的Header
	 	_dataGrid.columns = [columnLocale]; //这一个数组,如果有多列则以逗号隔开都放进去
	 	_dataGrid.dataProvider = value;	//设定DataGrid的dataProvider value为实际使用时Set的

		return _dataGrid;
	}</pre>
<h3>四:抓图</h3>
<p><a href="http://liguoliang.com/wp-content/uploads/2008/10/image14.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="195" alt="image" src="http://liguoliang.com/wp-content/uploads/2008/10/image-thumb14.png" width="230" border="0" /></a> </p>
<p>[为了方便起见上面代码简略了一部分]</p>
<p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></content:encoded>
			<wfw:commentRss>http://liguoliang.com/2008/actionscript%e4%b8%ad%e4%bd%bf%e7%94%a8%e8%87%aa%e5%ae%9a%e4%b9%89%e7%bb%84%e4%bb%b6-use-customui-in-flex-with-actionscript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

