我需要知道组合框更改时的值。我已经完成了事件的文档,在用户交互更改之前,他们都没有让您知道值是什么。 (currentStateChanging
是一个完整的红色鲱鱼!)处理open
事件并保存值不是解决方案,因为还有其他方法可以更改值。
我正在使用Flex 3.5 SDK。
答案 0 :(得分:1)
这样的东西?
var currentVal : Object;
private function onChange(newVal) : void {
// currentVal stores your previous value - do something with it
currentVal = newVal;
}
<mx:ComboBox change="onChange(event.target.selectedItem)"/>
我刚刚使用Spark ComboBox上的“更改”事件来解决这个问题,但它在mx版本上不可用
另外 - 请参阅this
答案 1 :(得分:0)
我提出了一个解决方案,但它并不完全可靠(因为它假设它在其他SDK中如何工作)并且它的优雅是缺乏的:
<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" valueCommit="OnChangeAnyway()" change="OnChange()">
<mx:Metadata>
[Event(name='traceable_change', type="assets.LineComboChangeEvent")]
</mx:Metadata>
<mx:Script><![CDATA[
public static const CHANGE:String = 'traceable_change';
private var m_oOld:Object;
private var m_oNew:Object;
private var m_bCallLaterPending:Boolean = false; //This is necessary, because I found OnChangeAnyway() could be called any number of times before OnChange() is
private function OnChange():void {
var oNewEvent:LineComboChangeEvent = new LineComboChangeEvent(CHANGE, m_oOld); //there's nothing special in this class
dispatchEvent(oNewEvent);
}
private function OnChangeAnyway():void {
if (!m_bCallLaterPending) {
m_bCallLaterPending = true;
callLater(function ():void { m_bCallLaterPending = false;}, []); //presumably, whatever is passed to callLater() will be executed after everything else currently queued
m_oOld = m_oNew;
m_oNew = value;
}
}
]]></mx:Script>
m_oNew
显然是多余的,因为该值可用于任何句柄traceable_change
,但它确实解释了为什么我必须对这些对象进行桶式移位。
有几个原因让我认为这不可靠:
valueCommit
处理程序将在change
之前调用。在我的系统上,似乎总是如此,但我没有在任何地方看到这个承诺。callLater()
之后调用change
次调用。请参阅关注1。答案 2 :(得分:0)
我得出的结论是没有答案:(最好的解决方法是覆盖所有可能的方法来设置组合框的值,并处理涉及用户更改值的任何事件,备份该值,然后你有一个以前的值的踪迹。然后,说了很多评论
这是一个3.5必要的kluge!如果在另一个SDK上执行此操作,则可能需要更改它!
=======