我需要知道组合框改变的值,当它改变时。我已经浏览了所有事件的文档,但在用户交互更改它之前,它们都没有让您知道值是什么。(currentStateChanging
完全是红鲱鱼!)处理open
事件并保存值不是解决方案,因为还有其他方法可以更改值。
我正在使用 Flex 3.5 SDK。
我需要知道组合框改变的值,当它改变时。我已经浏览了所有事件的文档,但在用户交互更改它之前,它们都没有让您知道值是什么。(currentStateChanging
完全是红鲱鱼!)处理open
事件并保存值不是解决方案,因为还有其他方法可以更改值。
我正在使用 Flex 3.5 SDK。
像这样的东西?
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 版本上不可用
也 - 看到这个
我得出的结论是没有答案:(最好的解决方法是覆盖所有可能的方法来设置组合框的值,并处理任何涉及用户更改值的事件,备份那个值,然后你有一个以前的值的踪迹。然后,放很多评论说
这是一个 3.5-必要的 kluge!如果在另一个 SDK 上执行此操作,您可能需要更改它!
=======
我提出了 w/a 解决方案,但它并不完全可靠(因为它假设它将如何在其他 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。