1

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

我正在使用 Flex 3.5 SDK。

4

3 回答 3

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 版本上不可用

也 - 看到这个

于 2013-04-18T21:05:00.160 回答
0

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

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

=======

于 2013-05-28T14:13:09.617 回答
0

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

  1. 它假定valueCommit处理程序将在处理程序之前被调用change。在我的系统上,它似乎总是如此,但我在任何地方都看不到那个承诺。
  2. 它假定callLater()之后调用的任何调用change都是。请参阅关注点 1。
于 2013-04-22T14:29:45.180 回答