Flex:在变化时获得组合框的先前值

时间:2013-04-18 20:25:37

标签: flex events combobox

我需要知道组合框更改时的值。我已经完成了事件的文档,在用户交互更改之前,他们都没有让您知道值是什么。 (currentStateChanging是一个完整的红色鲱鱼!)处理open事件并保存值不是解决方案,因为还有其他方法可以更改值。

我正在使用Flex 3.5 SDK。

3 个答案:

答案 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,但它确实解释了为什么我必须对这些对象进行桶式移位。 有几个原因让我认为这不可靠:

  1. 它假定valueCommit处理程序将在change之前调用。在我的系统上,似乎总是如此,但我没有在任何地方看到这个承诺。
  2. 它假定在callLater()之后调用change次调用。请参阅关注1。

答案 2 :(得分:0)

我得出的结论是没有答案:(最好的解决方法是覆盖所有可能的方法来设置组合框的值,并处理涉及用户更改值的任何事件,备份该值,然后你有一个以前的值的踪迹。然后,说了很多评论

  

这是一个3.5必要的kluge!如果在另一个SDK上执行此操作,则可能需要更改它!

=======